【问题标题】:c++ why "A a();" will not call constructor [duplicate]c++ 为什么“A a();”不会调用构造函数[重复]
【发布时间】:2016-02-04 15:47:43
【问题描述】:

为什么是 a();不会调用构造函数? 为什么 sizeof(C) 是 1?

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

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

执行“C a();”变成函数语句?

【问题讨论】:

标签: c++11


【解决方案1】:
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++ 不允许两个不同的对象具有相同的地址。

【讨论】:

    【解决方案2】:

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

    Ca;

    C *a = 新 C();

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

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

    【讨论】:

    • 对于 2 号,他在问 为什么 当没有成员变量时它的大小为 1。不管是不是。
    • 是的,我会编辑它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多