如何初始化标头中的静态成员[重复]

2023-12-20

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

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

字符串显然必须是默认初始化课堂之外。

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

如果我将上面的行与类一起包含在标题中,我会得到一个symbol multiply defined错误。它必须在单独的cpp文件,即使有include guards or pragma once.

没有办法在标题中定义它吗?


你不能定义一个static成员变量不止一次。如果将变量定义放入标头中,则它将在包含标头的每个翻译单元中定义。由于包含防护仅影响一个翻译单元的编译,因此它们也无济于事。

然而,你can define static member 功能!现在,乍一看,这似乎没有帮助,当然,该函数可以具有本地功能static变量并返回对其中一个变量的引用,其行为几乎就像static成员变量:

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

本地的static第一次调用该函数时,变量将被初始化。也就是说,构造会被延迟到第一次访问该函数为止。当然,如果你使用这个函数来初始化其他全局对象,它也可以确保对象被及时构造。如果您使用多个线程,这可能看起来像潜在的数据竞争,但事实并非如此(除非您使用 C++03):函数 local 的初始化static变量是线程安全的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何初始化标头中的静态成员[重复] 的相关文章

随机推荐

  • 使用 Apache 引导流量在类似生产环境中为 Django 通道提供服务

    我已经使用 Django Channels 了一段时间 但我一直在思考如何让它在本地开发服务器设置之外工作 在有人将文档页面粘贴给我之前 我已经用尽了 Django Channels 文档和其他我能找到的地方的搜索 我可以让本地设置正常工作
  • HIVE QL:如何从“显示分区表”中提取信息并在查询中使用它?

    当我想从一个大表中选择最后一个月时 我可以这样做 select from table where yyyymm select max yyyymm from table 这需要永远 但 hive gt show partitions tab
  • 更改 Hmisc Summary() 返回的摘要变量

    有没有一种简单的方法可以利用返回的传统四分位数summary formula with method reverse 来自 Hmisc R 库 我想获得每个连续变量的平均值 SD 最小值 最大值 但没有成功 可以通过参数传递自定义函数调用f
  • @RequestParam 与 @PathVariable

    有什么区别 RequestParam and PathVariable处理特殊字符时 被接受 RequestParam作为空间 如果是 PathVariable 被接受为 PathVariable就是从URI中获取一些占位符 Spring称
  • nginx:将移动请求重定向到 /mobile/$uri

    我正在尝试设置 nginx 将所有来自移动设备的请求重定向到 mobile uri 我想出了这个解决方案 但它似乎不起作用 是语法问题还是对整个重定向概念的误解 if http user agent iPhone iPod android
  • 如何在运行时以编程方式找出应用程序 ID?

    有没有办法做到这一点 我讨厌在某个地方硬编码应用程序 ID 如果您指的是您的 com whatever whatever 标识 NSString myAppID NSBundle mainBundle bundleIdentifier 如果
  • 请求的 URL 授权失败

    我正在将一些站点转移到运行 IIS6 的新 Windows 2003 安装中 但是我遇到了表单身份验证问题 相关网站在具有相同操作系统和 IIS 版本的旧机器上运行良好 当我尝试登录网站时 我收到事件日志 请求的 URL 授权失败 并且页面
  • 为什么 Spark SQL 认为索引的支持不重要?

    引用 Spark DataFrames 数据集和 SQL 手册 http spark apache org docs latest sql programming guide html unsupported hive functional
  • JS中拖动多张图片

    我想在窗口周围拖动多个图像 我可以用一张图像做到这一点 但用更多图像就不行了 我认为这是因为我动态创建 div 并且其余代码的 ID 未知 但我不知道如何解决该问题 function dragElement elmnt var pos1 0
  • 使用 jQuery 查找 XML 节点并使用其值

    我正在使用这样的 XML 文件
  • css include url 末尾的问号有什么作用?

    我注意到在某些网站 包括 SO 上 CSS 的链接如下所示 我想说可以肯定的是 v 6638告诉浏览器加载 css 文件的版本 6638 但是我可以在我的网站上执行此操作吗 我可以通过更改数字来包含不同版本的 CSS 文件吗 加载all c
  • 循环根据 R 中的其他情况创建一个新变量(非常基本)

    我有一个包含三个变量的数据框 ID group and nominated ID 我想知道group that nominated ID属于 我想象对于每种情况 我们都会采取nominated ID 找到它等于的情况ID 然后设置nomin
  • Grails 无法识别 Java 类

    我在 Windows 7 32 位 上使用 Groovy Grails Tool Suite 3 1 0 我一生都无法让 Grails 识别我在 Grails 应用程序的 src java 目录中创建的简单 Java 类 这是我的java类
  • React Native TextInput 不允许输入/文本更改

    我有一个带有 TextInput 和 2 个按钮的组件 1 个按钮递增 其他按钮递减 我在 TextInput 上有一个 onChange 和值 当单击按钮时 值会发生变化 输入中的文本增加或减少 但是通过 TextInput 输入值 它不
  • 在python中给定阈值时有效删除彼此接近的数组

    我使用 python 来完成这项工作 并且在这里非常客观 我想找到一种 pythonic 方法来从数组数组中删除距离阈值彼此接近的 重复项 例如 给出这个数组 5 024 1 559 0 281 6 198 4 827 1 653 6 19
  • 图表上“漂亮”网格线间隔的算法

    我需要一个相当智能的算法来为图形 图表 提供 漂亮的 网格线 例如 假设条形图的值为 10 30 72 和 60 您知道 最小值 10 最大值 72 范围 62 第一个问题是 从什么开始 在这种情况下 0 将是直观的值 但这不适用于其他数据
  • 什么是 Serilog 解构?

    Serilog的目的是什么 syntax 如果我运行以下命令 var dummy new Foo Bar Date DateTime Now Log Information Dummy object Dummy dummy 然后我得到控制台
  • 来自 nginx API 端点的响应“No Access-Control-Allow-Origin”

    我收到的错误似乎是 CORS 问题 我正在尝试通过以下方式向我的 RESTful API 发出 POST 请求HttpClient如下 import Component OnInit from angular core import Obs
  • ITMS-90429:无效的 Swift 支持 - 文件 libswiftDarwin.dylib、libswiftMetal.dylib、

    当我想在 Appstore Connect 上发布我的存档时 我遇到了 Xcode 12 3 swift 5 和 cocoapods 1 10 1 版本的问题 一切都很顺利 但是一旦应用程序发送 我就会收到一封来自 App Store Co
  • 如何初始化标头中的静态成员[重复]

    这个问题在这里已经有答案了 给定的是一个具有静态成员的类 class BaseClass public static std string bstring 字符串显然必须是默认初始化课堂之外 std string BaseClass bst