2015-11-04 124 views
2

为什么a a();不会调用构造函数? 以及为什么sizeof(C)是1?C++为什么“A a();”将不会调用构造函数

class C 
{ 
public: 
    C(){ 
     cout << "C default" << endl; 
    } 
}; 

int main() { 
    C a(); 
    cout << sizeof(C) << endl; 
    return 0; 
} 

做“C一();”成为一个函数声明

+1

[最令人烦恼的解析](https://en.wikipedia.org/wiki/Most_vexing_parse)。 – 101010

+2

什么是'A'?我只看到'C'。 – Downvoter

回答

4
C a(); 

这并不是创建一个名为aC一个实例,即声明了一个名为a函数,它不带任何参数和?返回C

为了得到你想要的东西,你有两个主要选择:

C a; 
C a{}; //c++11 

sizeof(C)1因为对象在C++中占据了至少一个字节,即使没有任何有意义的存储在那里。考虑一下你是否有一组C;如果sizeof(C)0,则c_array[0]将与c_array[10]处于相同的地址。 C++不允许两个不同的对象具有相同的地址。

-1

1.如果你想打电话的时候,一个新的对象被创建的构造, 的代码应该是这样的:

下的;

C * a = new C();

2.因为没有对象的内存地址与其他变量的地址相同。

因此,如果类或结构没有变量或函数,的sizeof(类)= 1

+1

对于第2号,当没有成员变量时,他问*为什么*它的大小是1。不是它是否。 – CoffeeandCode

+0

是的,我会编辑它 – gdreamlend

相关问题