新int和new(int)之间c ++的区别是什么?

时间:2011-03-18 09:20:58

标签: c++ pointers initialization

之间有什么区别
int * num = new (int);

int * num = new int;

有没有区别?

修改 thx all。 ...哪一个是最正确的答案?

5 个答案:

答案 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。