我可以用圆括号初始化数组吗?

时间:2011-11-11 19:27:24

标签: c++ constructor new-operator

偶尔,我在我的程序代码的一个地方写了一个拼写错误:

int a = 10;  
char* b = new char(a);

错误很明显:我写了()而不是[]。奇怪的是...代码编译好了,它在调试器中运行确定。但是,在执行这些行的函数之后,调试器外部的编译.exe崩溃了。

第二行代码真的合法吗?如果是,那对编译器意味着什么?

3 个答案:

答案 0 :(得分:10)

这是一个数字值为a的char,在本例中为10。指针不仅指向数组,你知道。

答案 1 :(得分:5)

您正在分配 char并为其分配a的值。它根本没有分配数组。

与在new表达式中为任何其他类型调用构造函数相同:

std::string* s = new std::string("foo");
int* i = new int(10);
std::vector<std::string>* v = new std::vector<std::string>(5, "foo");

答案 2 :(得分:2)

char t(a)创建一个初始化为a值的本地字符 new char (a)创建一个动态分配的char,初始化为a的值。