我有编译器对sizeof不同意.对于以下代码,Clang和GCC将编译它,但我必须使用的其他编译器声明"非法sizeof操作数".我对标准的解读说这是非法的,因为sizeof只能表达(我不认为S :: a是表达式)或类型id,但GCC和Clang两者都是错误的.我显然可以替换它sizeof(S().a),它适用于我的所有编译器.
struct S
{
int a[32];
int b;
int c;
int d[32];
};
int main()
{
return sizeof(S::a);
}
Run Code Online (Sandbox Code Playgroud)
Clang和GCC是错的,还是我误读标准?
kfs*_*one 26
§5.1.1[expr.prim.general] 13
只能使用表示非静态数据成员或类的非静态成员函数的id表达式:
- 作为类成员访问(5.2.5)的一部分,其中对象表达式引用成员的类[63]或从该类派生的类,或者
- 形成指向成员(5.3.1)的指针,或
- 如果该id-expression表示非静态数据成员,并且它出现在未评估的操作数中 [示例:
Run Code Online (Sandbox Code Playgroud)struct S { int m; }; int i = sizeof(S::m); // OK int j = sizeof(S::m + 42); // OK- 末端的例子]
编辑:正如@Praetorian在对问题本身的评论中指出:这是在C++ 11中引入的
| 归档时间: |
|
| 查看次数: |
730 次 |
| 最近记录: |