c++;在编译阶段处理未知大小的数组分配 < >我知道,C++在编译阶段使用相对距离,以提高代码的性能。例如,它知道两个局部整数的距离是4。 我的问题是关于编译期间大小未知的数组

c++;在编译阶段处理未知大小的数组分配 < >我知道,C++在编译阶段使用相对距离,以提高代码的性能。例如,它知道两个局部整数的距离是4。 我的问题是关于编译期间大小未知的数组,c++,arrays,C++,Arrays,例如,编译器没有以下代码中应为本地数组分配的内存量的信息: 它如何知道局部变量local2和size之间的相对距离 #include <iostream> using namespace std; int main() { int size = std::getchar(); int arr[size]; int local2; return 0; } #包括 使用名称空间std; int main(){ int size=std::getchar

例如,编译器没有以下代码中应为本地数组分配的内存量的信息: 它如何知道局部变量local2和size之间的相对距离

#include <iostream>
using namespace std;

int main() {
    int size = std::getchar();
    int arr[size];
    int local2;
    return 0;
}
#包括
使用名称空间std;
int main(){
int size=std::getchar();
int arr[尺寸];
int local2;
返回0;
}

可变长度数组在C++中不存在:


因此,您的问题的答案是:编译器没有办法知道,也不应该尝试。

可变长度数组在C++中不存在:


因此,您的问题的答案是:编译器没有办法知道,也不应该尝试。

它没有。这是一个编译时错误。您可能希望查看指针和动态内存分配/释放


基本上,对于单个实例,您将使用new/delete。对于数组,您将使用new[]/delete[]。不要将new与delete[]和new[]与delete组合。坏事会发生。

不会的。这是一个编译时错误。您可能希望查看指针和动态内存分配/释放


基本上,对于单个实例,您将使用new/delete。对于数组,您将使用new[]/delete[]。不要将new与delete[]和new[]与delete组合。坏的事情会发生。

这不是有效的C++。编译成功的@ LDN我没有说它不会编译。我刚才说它不是有效的C++。如果编译并成功运行代码,它就是一个有效的代码。这可能不是一个好代码,但它确实是valid@Idan-许多C++编译器都是C编译器的两倍。因此,它们恰好支持C语言中存在的特性。它们应该有所区别,这样您就不能尝试这样做,但大多数都不能。事实上,大多数人在编译代码时都会打开自己的扩展,而不会发出警告。例如,在g++中,必须设置std标志,如-std=c++11。不过,你还是得开动——学究式的。只有到那时,g++才会告诉你,你正在使用非标准的构造,我不知道它会捕捉到这个特殊的构造。不能使用成功的编译作为代码有效的证明。这是无效的C++。编译成功。我刚才说它不是有效的C++。如果编译并成功运行代码,它就是一个有效的代码。这可能不是一个好代码,但它确实是valid@Idan-许多C++编译器都是C编译器的两倍。因此,它们恰好支持C语言中存在的特性。它们应该有所区别,这样您就不能尝试这样做,但大多数都不能。事实上,大多数人在编译代码时都会打开自己的扩展,而不会发出警告。例如,在g++中,必须设置std标志,如-std=c++11。不过,你还是得开动——学究式的。只有到那时,g++才会告诉你,你正在使用非标准的构造,我不知道它会捕捉到这个特殊的构造。不能使用成功编译作为代码有效性的证明。