我正在尝试运行 alignof 运算符的示例。
#include <iostream>
struct Empty {};
struct Foo {
int f2;
float f1;
char c;
};
int main()
{
std::cout << "alignment of empty class: " << alignof(Empty) << '\n'
<< "alignment of pointer : " << alignof(int*) << '\n'
<< "alignment of char : " << alignof(char) << '\n'
<< "alignment of Foo : " << alignof(Foo) << '\n' ;
}
当我用 gcc (g++ -std=c++11 alignof.cpp) 编译它时,我没有得到任何错误。
但是当我用 icc (icpc -std=c++11 alignof.cpp) 编译它时,我得到以下错误,我不知道为什么:
cenas.cpp(13): error: type name is not allowed
std::cout << "alignment of empty class: " << alignof(Empty) << '\n'
^
cenas.cpp(13): error: identifier "alignof" is undefined
std::cout << "alignment of empty class: " << alignof(Empty) << '\n'
^
cenas.cpp(14): error: type name is not allowed
<< "alignment of pointer : " << alignof(int*) << '\n'
^
cenas.cpp(14): error: expected an expression
<< "alignment of pointer : " << alignof(int*) << '\n'
^
cenas.cpp(15): error: type name is not allowed
<< "alignment of char : " << alignof(char) << '\n'
^
cenas.cpp(16): error: type name is not allowed
<< "alignment of Foo : " << alignof(Foo) << '\n' ;
我在同一台机器上运行代码,并使用 module 命令更改编译器。
alignof 运算符如何未定义?
最佳答案
不同的编译器对 2011 年引入的新语言特性有不同的支持。
根据 this table ,英特尔的编译器尚不支持 alignof
。