gpt4 book ai didi

c++ - 如果一个静态成员没有被初始化并且成员类型是类本身怎么办?

转载 作者:搜寻专家 更新时间:2023-10-31 02:11:33 25 4
gpt4 key购买 nike

一个类是这样定义的:

class Singleton {
public:
static Singleton instance_;

private:
Singleton() {
cout << "constructor\n";
}
};

在函数中:

Singleton instance = Singleton::instance_;

可以编译代码并且没有抛出错误。如果我这样使用它:

Singleton &instance = Singleton::instance_;

抛出了链接错误。我想知道为什么第一种情况可以正确编译?而且我知道构造函数没有被调用。第一种情况下实例的对象状态是什么?第一种情况有意义吗?

最佳答案

这两种形式在您的代码中都是错误,但在这两种情况下,编译器/链接器都可以默默地忽略错误,它们不需要检测错误。

Singleton instance = Singleton::instance_; 使用隐式生成的复制构造函数。它从 Singleton::instance_ 复制所有 0 个非静态数据成员,因此很可能被完全优化掉。因此,您在没有定义的情况下使用 Singleton::instance_ 这一事实可能不会引起注意。

Singleton &instance = Singleton::instance_; 绑定(bind)到 Singleton::instance_ 并要求知道其地址。因此,如果未定义Singleton::instance_,则更有可能导致错误。

提供 Singleton::instance_ 定义的方式是

Singleton Singleton::instance_;

在文件范围内。

关于c++ - 如果一个静态成员没有被初始化并且成员类型是类本身怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43386483/

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