0

因此,当使用基本编译icc bob.cpp -o bob并运行时,以下代码段错误:

#include <string>

int foo () {
  return 6;
}

int main() {
  std::string t[foo()];
}

但是,以下两个类似的程序似乎运行良好。

#include <string>

int foo () {
  return 6;
}

int main() {
  int f = foo();
  std::string t[f];
}

#include <string>

int foo () {
  return 6;
}

int main() {
  std::string t[6];
}

我对发生的事情有点困惑。显然,可变长度数组是非标准的,这让我很惊讶,因为我一直使用支持它的 g++。但是,如果ICC不支持它,为什么要编译呢?另外,为什么示例 2“有效”?

这里什么是正确的代码,如果第一个片段不正确,为什么它会编译,然后为什么会出现段错误?

我在 2011 x86_64 Intel(R) Core(TM) i5 上使用 icc (ICC) 12.0.2 20110112。

谢谢

4

1 回答 1

3

好吧,虽然 C++ 确实没有可变长度数组(C99 确实如此),但显然 ICC 确实支持它们作为扩展,因为您的代码实际上可以编译(并且因为您的第二个片段实际上运行而没有崩溃)。

如果第一个版本崩溃,那么它一定是 ICC 实现该非标准扩展的错误。

于 2011-03-31T15:58:00.157 回答