对于同样的程序,c ++ 11返回2 1 2,但对于c ++ 14,返回2 1 1给我。我很困惑..
#include <iostream>
#include <string>
using namespace std;
int main()
{
char a[2];
cout << sizeof(a) << endl;
std::string b("a");
cout << b.size() << endl;
char c[b.size() + 1];
cout << sizeof(c) << endl;
return 0;
}
答案 0 :(得分:15)
char c[b.size() + 1];
,任何版本。
如果你发现编译器接受了这个,那么它是一个编译器扩展,所以你应该查阅你使用的编译器的文档。
答案 1 :(得分:9)
以下行不是标准C ++。
char c[b.size() + 1];
某些编译器支持它作为扩展。预计他们不会确认任何标准。当他们评估sizeof(c)
时,他们可能会从他们的实施角度返回任何有意义的东西。
答案 2 :(得分:0)
除了答案之外,我想补充一点,这个术语被称为可变长度数组,它是C99以来的C ++扩展。 VisualC ++编译器总是将其输出为错误,但GCC和Clang不会。
只有在您的标记中添加-pedantic
标记时,它才会输出warning: ISO C++ forbids variable length array 'c' [-Wvla]