C++ 14 与 11 - 大小返回不同的值?

c++ 14 vs 11 - sizeof return different value?

本文关键字:返回 C++      更新时间:2023-10-16

对于同一个程序,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;
}
char c[b.size() + 1];

在标准C++任何版本中都不允许使用。

如果您发现编译器接受此功能,则它是编译器扩展,因此您应该查阅您使用的任何编译器的文档。

以下行不是标准C++。

char c[b.size() + 1];

一些编译器支持它作为扩展。他们预计不会确认任何标准。当他们评估sizeof(c)时,他们可能会返回从他们的实现角度来看有意义的任何内容。

除了答案之外,我还想补充一点,这个术语被称为可变长度数组,它是自 C99 以来C++的扩展。VisualC++ 编译器总是将此输出为错误,但 GCC 和 Clang 不会。

仅当您将-pedantic标志添加到您的标志时,它才会输出warning: ISO C++ forbids variable length array 'c' [-Wvla]