que not declared c++ pointers initialization

not - ¿Cuál es la diferencia en c++ entre int nuevo y nuevo(int)?



nullptr que es (5)

(No es realmente una respuesta, pero no puedo poner esto en un comentario)

Es aún más complicado debido a la "ubicación nueva": 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; }

Aquí es interesante que gcc acepte esto, pero no MS / Intel.

Cuál es la diferencia entre

int * num = new (int);

y

int * num = new int;

?

¿Hay alguna diferencia?

EDITAR THX todo. ... ¿Cuál es la respuesta más correcta ?


En el caso de esta pregunta, los significados de estos dos new son idénticos. Gramaticalmente, el operando de la primera forma new () es type-id, y el operando de la última es new-type-id. En cuanto a new-type-id, si (....) aparece en la parte posterior del operando, se interpreta como la lista de argumentos del constructor. Es decir, si escribimos new int(1) , el int se inicializa en 1. Por otro lado, en cuanto a type-id, si aparece (....) , es una parte del tipo. Por ejemplo, cuando introducimos un puntero a una función, tenemos que usar la new( type-id ) . Por ejemplo, como new( int(*)() ) .


Hay otra diferencia cuando quieres crear una matriz dinámica

int n = 2; int *p = new int[n]; // valid int *q = new (int[n]); // invalid

La versión entre paréntesis requiere un tamaño constante.


No hay una diferencia en el contexto de su ejemplo (usar un tipo int ). Sin embargo, hay una diferencia si necesita crear objetos de tipos compuestos, donde necesita usar una versión entre paréntesis. es decir:

int (**fn_ptr_ok) () = new (int (*[10]) ()); // OK int (**fn_ptr_err) () = new int (*[10]) (); // error


Para este caso particular, ninguna diferencia en absoluto. Ambos son lo mismo. Solo la primera sintaxis se usa raramente, tal vez porque parece incómoda y críptica, ¡y requiere más escritura!