gpt4 book ai didi

C++ 类默认构造函数

转载 作者:太空宇宙 更新时间:2023-11-03 10:37:28 25 4
gpt4 key购买 nike

之前我问过为什么这被认为是不好的:

class Example
{
public:
Example(void);
~Example(void);
void f() {}
}

int main(void)
{
Example ex(); // <<<<<< what is it called to call it like this?

return(0);
}

现在,我了解到它正在创建一个函数原型(prototype),而不是返回一个类型 Example。我仍然不明白为什么它会在 g++ 和 MS VC++ 中工作。

我的下一个问题是使用上面的方法,这个调用是否有效?

int main(void)
{
Example *e = new Example();

return(0);
}

?这和简单地调用 Example e() 有什么区别???就像我知道它是一个函数原型(prototype),但似乎有些编译器会原谅它并允许它调用默认构造函数?我也试过这个:

class Example
{
private:
Example();

public:
~Example();
};

int main(void)
{
Example e1(); // this works
Example *e1 = new Example(); // this doesn't

return(0);
}

所以我有点困惑 :( 如果这个问题被问了一百万次,我很抱歉。

最佳答案

这很简单,丹尼尔:

Example *e = new Example();

这看起来不像是一个名为“Example”的函数,对吧?函数有返回值、名称和参数。以上如何适合呢?

Example e1(); // this works

是的,因为您没有在任何地方创建 Example 的任何实例。您只需告诉代码在某处周围的命名空间中定义了一个函数,并且您可能想要调用该函数。是的,为了返回 Example 的对象,确实会创建一个实例。但这并不意味着此时会创建一个实例。相反,当您调用它时,会在函数中创建一个实例。

关于C++ 类默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/457719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com