【发布时间】:2016-07-11 00:10:41
【问题描述】:
我了解到 C++ 在编译阶段使用相对距离来提高代码的性能。例如,它知道两个局部整数的距离是 4。 我的问题是关于编译期间大小未知的数组
例如,编译器在以下代码中没有关于它应该为本地数组分配的内存量的信息: 它怎么知道局部变量local2和size的相对距离
#include <iostream>
using namespace std;
int main() {
int size = std::getchar();
int arr[size];
int local2;
return 0;
}
【问题讨论】:
-
这是不是有效的 C++。
-
@ldan 我没有说它不会编译。我只是说它不是有效的 C++。
-
如果一个代码被编译并成功运行,它就是一个有效的代码。它可能不是一个好的代码,但它是有效的
-
@Idan - 许多 C++ 编译器兼作 C 编译器。因此,它们碰巧支持 C 中存在的功能。它们应该进行区分,这样您就无法尝试这样做,但大多数都不会。事实上,大多数编译代码时都打开了自己的扩展而不会发出警告。例如,在 g++ 中,您必须设置 std 标志,例如 -std=c++11。仍然那么你必须打开-pedantic。只有这样 g++ 才会告诉您您正在使用非标准构造,我不知道它会捕获这个特定的构造。你不能用成功编译来证明你的代码是有效的。