Occasionaly,我做了一个错字在一个地方我的程序代码:我真的可以用圆括号初始化一个数组吗?
int a = 10;
char* b = new char(a);
错误是显而易见的:我写的(),而不是[]。奇怪的是...代码编译好了,它在调试器中运行正常。但是,在调试器外部编译的.exe函数在执行完这些行之后崩溃了一会儿。
第二行代码真的合法吗?如果是,编译器意味着什么?
Occasionaly,我做了一个错字在一个地方我的程序代码:我真的可以用圆括号初始化一个数组吗?
int a = 10;
char* b = new char(a);
错误是显而易见的:我写的(),而不是[]。奇怪的是...代码编译好了,它在调试器中运行正常。但是,在调试器外部编译的.exe函数在执行完这些行之后崩溃了一会儿。
第二行代码真的合法吗?如果是,编译器意味着什么?
它是一个单个字符,其数值为a
,在这种情况下为10
。指针不仅指向数组,你知道。
您正在分配一个单个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");
char t(a)
创建初始化为a
值本地字符。
new char (a)
创建一个动态分配的char,初始化为a
的值。