C++,数组大小必须是一个常量表达式。

3
我目前正在阅读Lappman的《C++ Primer》。在第113页上,它说:
“数组中的元素数量是数组类型的一部分。因此,维度必须在编译时已知,这意味着维度必须是常量表达式。”
此外,它还指出我们不能做这样的事情:
unsigned cnt  = 43; //not an const expression
string bad[cnt]; // error

但这不是真的,我编译它时没有任何问题,我甚至可以做出像这样的东西。
int i;
cin >> i;
get_size(i);

void get_size(int size) {
  int arr[size];
  cout << sizeof (arr);
}

它很好用,那为什么每本书都说数组大小必须在编译时知道?或者它必须是常量表达式?


@juan:如果使用Stack Overflow,请尝试在“答案部分”发布对问题的回答。 - Lightness Races in Orbit
@LightnessRacesinOrbit 我正在挑选一个合适的副本。当有这么多选择时,很难做出决定。 - juanchopanza
2个回答

6
因为那些书在教你C++。
在C++中,这是真的。
你正在使用GCC特有的非标准扩展,称为“可变长度数组”。
如果您打开所有编译器警告(始终应该这样做),则构建过程中会收到有关此事的通知。

1

虽然在C++中不鼓励这样做。这是高度不可移植和不必要的。 - Lightness Races in Orbit
@LightnessRacesinOrbit:- 是的,没错,这就是我加入 C99 部分的原因。 - Rahul Tripathi
我只是想说这有点误导。你可以强调,就这个问题而言,它并不是“非常可接受且事实上标准”的。 - Lightness Races in Orbit
@LightnessRacesinOrbit:已更新。 - Rahul Tripathi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接