2009-03-28 9 views
15

Dado el siguiente código:¿Cuál es el significado de tener vacío en la definición del constructor?

#pragma once 

class B 
{ 
public: 

    B(void) 
    { 
    } 

    ~B(void) 
    { 
    } 
}; 

Yo sé que puedo escribir esto:

#pragma once 

class B 
{ 
public: 

    B() 
    { 
    } 

    ~B() 
    { 
    } 
}; 

¿Cuál es el propósito de tener void en el primer ejemplo? ¿Es algún tipo de práctica que indica que el constructor toma cero parámetros?

+0

encontré esta discusión bastante interesante en aquel entonces: http://stackoverflow.com/questions/540748/void-void-c-and-c –

Respuesta

34

Los dos son iguales, al menos en C++. En C, proporcionar un par de paréntesis vacíos generalmente significa una lista de parámetros no especificada (a diferencia de una lista de parámetros vacía). C++ no tiene este problema.

¿Cómo se puede obtener una respuesta correcta tantas veces? Sin embargo, otro error SO?

+2

Al menos estás en lo positivo. Recientemente tuve una respuesta aceptada (correcta) que terminó con votos negativos. Perturbador. – JaredPar

+0

@JaredPar: Y estaba bromeando sobre esto también le sucederá a un colega hace un par de días.Tengo 3 respuestas aceptadas eliminadas en los últimos 3 días, ¿impactante? – dirkgently

+0

@dirkgently, eso es extraño. Creo que promedio aproximadamente 1 respuesta aceptada eliminada cada 2-3 semanas. 3 en 3 días es definitivamente alto. – JaredPar

0

afaik si pasa void en el constructor o cualquier función como argumento, significa que la función dosnt toma cualquier argumento, por lo que los ejemplos a y b son iguales. pero no estoy seguro de si alguno de ellos cambia la firma de la función de alguna manera o la hace funcionar más rápido, etc.

8

Hace mucho tiempo que hizo algo como esto en C (mi pre-ISO C es oxidado :)):

void foo(a, b) 
    int a, 
    int b 
{ 
} 

mientras que C++ se estaba creando el nombre mangling requiere los tipos de los argumentos , así que para C++ se cambió a:

void foo(int a, int b) 
{ 
} 

y este cambio fue llevado hacia adelante a C.

en este punto, creo para evitar ruptura ing código C existente esto:

void foo() 

y esto:

void foo(void) 

significaba dos cosas muy diferentes, () significa no comprueban el número de argumento o escriba y (void) significa no tiene argumentos. Para C++ () que significa no comprobar nada no iba a funcionar, por lo que () y (void) significan lo mismo en C++.

Por lo tanto, para C++ () y (void) siempre han sido lo mismo.

Al menos así es como lo recuerdo ... :-)

0

simplemente quería añadir que cuando se utiliza vacío después de que los parámetros como la función(): void se utiliza para indicar que la función hace no devuelve un valor

Cuestiones relacionadas