Eventuali duplicati:
Why is it an error to use an empty set of brackets to call a constructor with no arguments?Perché il costruttore non viene chiamato quando() viene utilizzato per dichiarare un oggetto?
$ 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
$
Che cosa la sintassi Matrix m1();
fare?
Ho creduto che sia lo stesso di Matrix m1;
. Ovviamente mi sbaglio.
@Lazer: per convincerti, tenta di utilizzare M1 (ad esempio l'accesso ai m1.m_count) ... – Francesco
In C++ 11 è possibile utilizzare le parentesi graffe per tutte le chiamate del costruttore questo evita l'analisi più irritante del C++, cioè Matrix m1 {}; – mark
Questa non è la "analisi più irritante", l'analisi più irritante si ha quando si tenta di dichiarare, eseguire un oggetto e passare un valore inizializzato temporaneamente a uno o più parametri di costruzione. Per esempio. 'A b (A());'. 'Matrix m1();' è solo una dichiarazione di funzione regolare. –