之间有什么区别
int * num = new (int);
和
int * num = new int;
有没有区别?
修改 thx all。 ...哪一个是最正确的答案?
答案 0 :(得分:14)
您的示例的上下文没有区别(使用 int 类型)。 但是,如果需要创建复合类型的对象,则需要使用带括号的版本。即:
int (**fn_ptr_ok) () = new (int (*[10]) ()); // OK
int (**fn_ptr_err) () = new int (*[10]) (); // error
答案 1 :(得分:10)
对于这种特殊情况,根本没有区别。两者都是一样的。只是第一种语法很少使用,可能是因为它看起来不方便和神秘,需要更多打字!
答案 2 :(得分:6)
当您想要创建动态数组
时,还有另一个区别int n = 2;
int *p = new int[n]; // valid
int *q = new (int[n]); // invalid
带括号的版本需要一个恒定的大小。
答案 3 :(得分:2)
在这个问题的案例中,这两个new
的含义是相同的。
在语法上,前一种形式new ()
的操作数是type-id,
并且后者的操作数是new-type-id。
对于new-type-id,如果(....)
出现在操作数的后面,则为
解释为构造函数的参数列表。
也就是说,如果我们写new int(1)
,int
初始化为1。
另一方面,对于type-id,如果出现(....)
,则它是该类型的一部分。
例如,当我们new
指向函数的指针时,我们必须使用
new( type-id )
表格。
例如,new( int(*)() )
。
答案 4 :(得分:1)
(不是真的答案,但我不能把它放到评论中)
由于“新位置”,它更加复杂: http://codepad.org/pPKt31HZ
#include <stdio.h>
void* operator new( size_t N, int x ) {
return new char[N];
}
int main( void ) {
int x = int();
int* a = new( int() ) int;
}
有趣的是gcc接受了这个,但不是MS / Intel。