首页 > 解决方案 > C++:类定义中的sizeof(member)

问题描述

下面的代码格式正确吗?

#include <cstddef>

struct Test
{
    int      member;
    static constexpr const size_t   Size1 = sizeof(member);
    static constexpr const size_t   Size2 = sizeof(decltype(member));
    static constexpr const size_t   Size3 = sizeof(Test::member);
};

该问题sizeof(member)用于类本身的定义。所有Size1,Size2Size3初始化程序都与 gcc、clang 和更新的 MSVC 配合得很好。但是 MSVC 14 不满意Size1(其他两个都可以)。它说:

错误 C2327:“Test::member”:不是类型名称、静态或枚举数

这让我感到困惑,因为member(无论是否合格)在该类的上下文中似乎是一个有效的表达。

那么,我应该将此视为旧 MSVC 中的错误,还是这样的错误消息合理?

标签: c++c++11sizeof

解决方案


推荐阅读