c ++为什么" A a();"不会调用构造函数

时间:2015-11-04 08:24:34

标签: c++11

为什么A a();不会打电话给构造函数? 为什么sizeof(C)是1?

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

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

“C a();”成为函数Statement吗?

2 个答案:

答案 0 :(得分:4)

C a();

这不会创建一个名为C的{​​{1}}实例,它声明一个名为a的函数,该函数不带参数并返回a

要获得您想要的东西,您有两个主要选择:

C

C a; C a{}; //c++11 sizeof(C),因为 C ++中的每个对象至少占用一个字节,即使那里没有存储任何有意义的内容。想想你是否有一个1数组;如果Csizeof(C),则0c_array[0]位于同一地址。 C ++不允许两个不同的对象具有相同的地址。

答案 1 :(得分:-1)

1.如果要在创建新对象时调用构造函数, 代码应该是这样的:

C a;

C * a = new C();

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

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