如何在标头中初始化静态成员

苹果壳

给定的是一个带有静态成员的类。

class BaseClass
{
public:
    static std::string bstring;
};

显然,字符串必须在类外部进行默认初始化

std::string BaseClass::bstring {"."};

如果我在类的标题中包含上述行,则会收到symbol multiply defined错误消息。cpp即使使用include guards,也必须在单独的文件中定义它pragma once

有没有一种方法可以在标头中定义它?

迪特玛·库尔(DietmarKühl)

您不能static多次定义成员变量。如果将变量定义放在标头中,它将在包含标头的每个转换单元中进行定义。由于包含保护仅影响一个翻译单元的编译,因此它们也无济于事。

但是,您可以定义static成员函数现在,乍看之下似乎没有什么帮助,当然,该函数可以具有局部static变量,并且返回对其中一个的引用的行为几乎类似于static成员变量:

static std::string& bstring() { static std::string rc{"."}; return rc; }

static首次调用此函数时,将初始化局部变量。即,构造被延迟直到第一次访问该功能。当然,如果使用此函数初始化其他全局对象,则还可能确保该对象及时构建。如果使用多个线程,这看起来可能是潜在的数据争用,但事实并非如此(除非您使用C ++ 03):函数局部static变量的初始化是线程安全的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在子类中初始化静态成员?

来自分类Dev

标头中的结构重复初始化

来自分类Dev

在C ++中,如何在类中初始化不可复制的静态成员变量?

来自分类Dev

如何初始化静态向量成员?

来自分类Dev

模板静态成员初始化顺序

来自分类Dev

静态数据成员的初始化

来自分类Dev

初始化静态原子成员变量

来自分类Dev

静态const成员变量初始化

来自分类Dev

C ++类静态成员初始化

来自分类Dev

跨系统的静态成员初始化

来自分类Dev

非静态数据成员初始化

来自分类Dev

初始化模板类的静态成员

来自分类Dev

初始化静态类成员

来自分类Dev

静态成员必须初始化吗?

来自分类Dev

初始化静态原子成员变量

来自分类Dev

跨系统的静态成员初始化

来自分类Dev

模板静态成员初始化顺序

来自分类Dev

C ++静态数据成员初始化

来自分类Dev

在标头中声明后如何初始化2D char数组

来自分类Dev

在标头中声明符号常量而不进行初始化?

来自分类Dev

如何在结构中初始化静态数组

来自分类Dev

我如何在C ++中初始化静态指针?

来自分类Dev

如何在函数中的堆上初始化静态结构?

来自分类Dev

如何在 Java 中静态初始化对象数组

来自分类Dev

如何在成员初始值设定项列表之外初始化类成员

来自分类Dev

c ++是否保证标头初始化的静态const成员在编译单元和库之间共享单个实例?

来自分类Dev

在clang中实例化之后的静态成员初始化

来自分类Dev

静态类在导入时初始化。Python 2如何在导入时初始化静态类

来自分类Dev

如何在Magento标头中显示CMS静态块