c ++ 14 vs 11 - sizeof返回不同的值?

时间:2017-08-21 03:10:14

标签: c++ c++11 c++14

对于同样的程序,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;
}

3 个答案:

答案 0 :(得分:15)

标准C ++中不允许使用

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]