【发布时间】:2018-07-29 16:45:42
【问题描述】:
C++ 编译器的行为可能不同。由于可以使用以下方法声明 C++ 中的数组:
方法一:
int size;
cout << "Enter size of array: ";
cin >> size;
int x[size];
for (int i = 0; i < size; i++)
{
//cout << "x[" << i << "] = ";
x[i] = i + 1;
}
方法B
int size;
cout << "Enter size of array: ";
cin >> size;
int *x = new int[size];
for (int i = 0; i < size; i++)
{
//cout << "x[" << i << "] = ";
x[i] = i + 1;
}
通过在运行时获取用户的输入,两者都可以正常工作。我知道,使用 B 方法,我们必须像 delete [] x 一样删除 x。
- 为什么要使用
int *x = new int[size];,如果两者服务相同 目的? - 使用
new有什么好处?
下面是我正在测试的代码sn-p:
#include<iostream>
using namespace std;
int main()
{
int size;
cout << "Enter size of array: ";
cin >> size;
//int *x = new int[size];
int x[size];
for (int i = 0; i < size; i++)
{
//cout << "x[" << i << "] = ";
x[i] = i + 1;
}
cout << endl << "Display" << endl;
for (int i = 0; i < size; i++)
{
cout << "x[" << i << "] = " << x[i] << endl;
}
return 0;
}
【问题讨论】:
-
“方法 A”无效。 C++ 没有variable-length arrays。每当您想到“动态数组”时,您的下一个想法应该始终是
std::vector。 -
@Malikx 那你肯定应该启用更多警告。
-
方法 A 是 一些 编译器支持的编译器扩展 - 它不是标准 C++
-
@Malikx - 一个有效的 C++ 结构和一个接受它的编译器不是一回事。编译器可能会实现语言扩展或其中存在错误。
-
因为没有使用
-pedantic标志编译...