したがって、basicicc bob.cpp -o bob
でコンパイルして実行すると、次のコードがsegfaultsします。
#include <string>
int foo () {
return 6;
}
int main() {
std::string t[foo()];
}
ただし、次の2つの同様のプログラムは正常に実行されているようです。
#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.220110112を使用しています。
ありがとう