C++ 我的错误,还是英特尔编译器中的错误?非静态成员错误的大小
我相信这一准则:C++ 我的错误,还是英特尔编译器中的错误?非静态成员错误的大小,c++,c++11,sizeof,C++,C++11,Sizeof,我相信这一准则: #include <stdio.h> struct foo { char array[1024]; }; int main() { fprintf(stderr, "sizeof(foo::array): %zd\n", sizeof(foo::array)); } 是我的错还是ICC做了错误的事情:C++规范?< /p> < p>它是编译器错误,或者编译器在这个标准被采用之前发出。 根据C++标准(5.1个主要表达式)< /P> 1
#include <stdio.h>
struct foo {
char array[1024];
};
int main() {
fprintf(stderr, "sizeof(foo::array): %zd\n", sizeof(foo::array));
}
是我的错还是ICC做了错误的事情:C++规范?< /p> < p>它是编译器错误,或者编译器在这个标准被采用之前发出。
根据C++标准(5.1个主要表达式)< /P> 13表示非静态数据成员或 类的非静态成员函数只能用于:
-如果该id表达式表示非静态数据成员,则 出现在未计算的操作数中这是C++11的一部分。clang++也认为这是一个错误:
:8:62:错误:非静态数据成员'array'fprintf的使用无效(stderr,“sizeof(foo::array):%zd\n”,sizeof(foo::array));~~~~~^~~~代码>GCC现在默认为C++11,也许这就是问题所在?您可能需要告诉其他编译器使用C++11,可能是使用-std=C++11
。@PaulR:clang也可以使用C++11。@Tavian,我使用的是gcc 4.4.7,所以还不支持C++11。这听起来像是gcc将该功能后移植到C++98中,直到14年才添加到icc中。0@gct听起来不错。C+=标准允许使用这种构造。所有其他问题都是你个人的问题。@gct也会阅读关于N2253的评论
error #288: a nonstatic member reference must be relative to a specific object
[ Example:
struct S {
int m;
};
int i = sizeof(S::m); // OK
int j = sizeof(S::m + 42); // OK
—end example ]