Duplicar posible:
Why is it an error to use an empty set of brackets to call a constructor with no arguments?¿Por qué no se llama al constructor cuando() se usa para declarar un objeto?
$ cat cons.cpp
#include <iostream>
class Matrix {
private:
int m_count;
public:
Matrix() {
m_count = 1;
std::cout << "yahoo!" << std::endl;
}
};
int main() {
std::cout << "before" << std::endl;
Matrix m1(); // <----
std::cout << "after" << std::endl;
}
$ g++ cons.cpp
$ ./a.out
before
after
$
¿Qué la sintaxis Matrix m1();
hacer?
Creo que es lo mismo que Matrix m1;
. Obviamente estoy equivocado.
@Lazer: convencer a sí mismo, trate de usar m1 (por ejemplo, acceso a m1.m_count) ... – Francesco
En C++ 11 se puede utilizar llaves para todas las llamadas de constructor esto evita el análisis más molesto de C++, es decir, Matrix m1 {}; – mark
Este no es el "análisis más irritante", el análisis más irritante es cuando intentas declarar, objetar y pasar un valor inicializado temporalmente a uno o más de sus parámetros de constructor. P.ej. 'A b (A());'. 'Matrix m1();' es solo una declaración de función normal. –