如何处理静态存储持续时间警告?

2024-03-02

我是一个试图从书本上学习 C++ 的新手。下面的代码可以正常工作并产生预期的输出,但是定义的两行有警告engine and randomInt:“使用静态存储持续时间初始化‘引擎’可能会引发无法捕获的异常。”

如果我将第 7 行和第 8 行放在main(),警告完全消失,但是随后engine and randomInt不可用getNumber.

我不知道如何修复这些警告。另外,也许更重要的是,使用的正确方法是什么?randomInt除了在各个地方main()?在中声明是否合适main()然后根据需要将其传递给函数?不知何故main()感觉不是宣布此类事情的合适地点。

我之前问过一个与此类似的问题,但我仍然很难理解,并提供了一个希望有用的示例。

// Loosely based on Fig. 6.12: fig06_12.cpp, C++ How To Program, Ninth Edition

#include <iostream>
#include <iomanip>
#include <random>

std::default_random_engine engine( static_cast<unsigned int>( time(nullptr) ) );
std::uniform_int_distribution<unsigned int> randomInt( 1, 6 );

int getNumber();

int main() {
    for ( unsigned int counter = 1; counter <= 10; ++counter ) {
        std::cout << std::setw( 10 ) << randomInt( engine );
        if ( counter % 5 == 0 )
            std::cout << std::endl;
    }
    std::cout << getNumber() << std::endl;
    return 0;
}

int getNumber () {
    return randomInt( engine );
}

Output:

/CLionProjects/Warning/cmake-build-debug/Warning
         3         5         6         3         3
         1         4         2         4         5
2

Process finished with exit code 0

推迟全局变量(例如您正在使用的变量)的初始化的一种方法是将它们包装在get-功能。

std::default_random_engine& getEngine()
{
   // Initialized upon first call to the function.
   static std::default_random_engine engine(static_cast<unsigned int>(time(nullptr)));
   return engine;
}

std::uniform_int_distribution<unsigned int>& getRandomInt()
{ 
   // Initialized upon first call to the function.
   static std::uniform_int_distribution<unsigned int> randomInt(1, 6);
   return randomInt;
}

然后使用getEngine() and getRandomInt()而不是直接使用变量。

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

如何处理静态存储持续时间警告? 的相关文章

  • FileStream 构造函数和默认缓冲区大小

    我们有一个使用 NET 4 用 C 编写的日志记录类 我想添加一个构造函数参数 该参数可以选择设置文件选项 WriteThrough http msdn microsoft com en us library system io fileo
  • 为什么在创建矩阵类时使用向量不好?

    对于我的矩阵类 我做了 template
  • VS 程序在调试模式下崩溃,但在发布模式下不崩溃?

    我正在 VS 2012 中运行以下程序来尝试 Thrust 函数查找 include cuda runtime h include device launch parameters h include
  • 与 Qt 项目的静态链接

    我有一个在 Visual Studio 2010 Professional 中构建的 Qt 项目 但是 当我运行它 在调试或发布模式下 时 它会要求一些 Qt dll 如果我提供 dll 并将它们放入 System32 中 它就可以工作 但
  • 如何在 SqlDataReader.Read() 期间从死锁异常中恢复

    我的 NET 应用程序的事件日志显示 它在从 Sql Server 读取数据时偶尔会出现死锁 这种情况通常非常罕见 因为我们已经优化了查询以避免死锁 但有时仍然会发生 过去 我们在调用ExecuteReader函数在我们的SqlComman
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • 为什么这个没有特殊字符的正则表达式会匹配更长的字符串?

    我正在使用此方法来尝试查找匹配项 例如 Regex Match A2 TS OIL TS OIL RegexOptions IgnoreCase Success 我得到了真实的结果 我很困惑 我认为这应该返回 false 因为模式中没有特殊
  • 时间:2019-03-17 标签:c#ThreadSafeDeepCopy

    我一直在阅读很多其他问题以及大量谷歌搜索 但我一直无法找到明确的解决方案 根据我读过的一些最佳实践 类的静态方法应该创建线程安全的 并且实例成员应该将线程安全留给消费者 我想为该类实现深度复制方法 该类本身还有其他引用类型成员 有没有什么方
  • 如何在 QTabWidget Qt 中展开选项卡

    我有一个QTabWidget像这个 但我想展开选项卡以 填充 整个小部件宽度 如下所示 我怎样才能做到这一点 我在用Qt 5 3 2 and Qt 创建者 3 2 1 Update 我尝试使用setExpanding功能 ui gt myT
  • 从 WebBrowser 控件 C# 获取滚动值

    我试图在 WebBrowser 控件中获取网页的 Y 滚动索引 但无法访问内置滚动条的值 有任何想法吗 对于标准模式下的 IE 使用文档类型 正如你所说 scrollTop是的财产元素 而不是 HtmlDocument htmlDoc th
  • 如何从文本文件读取整数到数组

    这就是我想做的 我对此有些不满 但我希望你能容忍我 这对我来说是一个非常新的概念 1 在我的程序中 我希望创建一个包含 50 个整数的数组来保存来自文件的数据 我的程序必须获取用户的文档文件夹的路径 2 文件的名称为 grades txt
  • C++ php 和静态库

    我创建了一个library a 其中包含 cpp 和 h 文件 其中包含很多类 嵌套类和方法 我想在 php 示例中包含这个静态库并尝试使用它 我想提一下 我是 php 新手 我已经在 test cpp 文件中测试了我的 libray a
  • AES 输出是否小于输入?

    我想加密一个字符串并将其嵌入到 URL 中 因此我想确保加密的输出不大于输入 AES 是可行的方法吗 不可能创建任何始终会创建比输入更小的输出的算法 但可以将任何输出反转回输入 如果您允许 不大于输入 那么基本上您只是在谈论同构算法alwa
  • 每个租户的唯一用户名和电子邮件

    我正在使用以下代码编写多租户应用程序ASP NET Core 2 1 我想覆盖默认的与用户创建相关的验证机制 目前我无法创建多个具有相同的用户UserName My ApplicationUser模型有一个名为TenantID 我想要实现的
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • 跨多个域的 ASP.NET 会话

    是否有合适的 NET 解决方案来在多个域上提供持久服务器会话 即 如果该网站的用户在 www site1 com 下登录 他们也将在 www site2 com 下登录 安全是我们正在开发的程序的一个问题 Thanks 它是否需要在会话中
  • 使用taskkill停止Windows服务

    我需要帮助来使用 C 终止 Windows 服务 现在要终止该服务 请使用以下选项 从命令 sc queryex ServiceName 发现后PID服务的 taskkill pid 1234 exemple f 为了便于阅读 但如果您明白
  • 您是否将信息添加到每个 .hpp/.cpp 文件的顶部? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 创建新的 C 头文件 源文件时 您会在顶部添加哪些信息 例如 您是否添加日期 您的姓名 文件描述等 您是否使用结构化格式来存储此信息 e g F
  • 在简单注入器中解析具有自定义参数的类

    我正在使用以下命令创建 WPF MVVM 应用程序简易注射器作为 DI 容器 现在 当我尝试从简单注入器解析视图时遇到一些问题 因为我需要在构造时将参数传递到构造函数中 而不是在将视图注册到容器时 因此这不是适用的 简单注入器将值传递到构造
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • GPS 应用程序在 iOS 5 上停止工作 - 位置管理器未更新

    我开发了一个针对 iOS 4 3 的应用程序 效果很好 但自从我迁移到 iOS 5 0 以来 该应用程序开始表现出奇怪的行为 位置管理器不显示位置变化的更新 有人遇到过这种问题吗 谢谢你的帮助 我与 CLLocation 经理共享票价 出现
  • 没有 Visual Studio 2010 的 T4 代码生成?

    是否可以在不需要 Visual Studio 2010 的情况下运行 T4 代码生成 基本上我必须构建一个内部 ORM 不要问 如果我有选择我不会 我计划使用亚音速作为基础 但改变一些东西及其工作方式 然而我的主要问题是我可以从我编写的外部
  • Spring Data Elasticsearch (4.x) - 使用 @Id 强制 _source 中的 id 字段

    Summary 最近我们升级到 Spring Data Elasticsearch 4 x 这个主要版本的一部分意味着 Jackson 不再用于将我们的域对象转换为 json 使用MappingElasticsearchConverter相
  • 静态库中的 Objective-C 类别

    你能指导我如何正确地将静态库链接到 iPhone 项目吗 我使用添加到应用程序项目中的静态库项目作为直接依赖项 目标 gt 常规 gt 直接依赖项 并且所有工作正常 但类别 静态库中定义的类别在应用程序中不起作用 所以我的问题是如何将某些类
  • 在 django 中使用 pika 的 Rabbitmq 监听器

    我有一个 django 应用程序 我想使用来自rabbit mq 的消息 我希望监听器在启动 django 服务器时开始使用 我正在使用 pika 库连接到rabbitmq 提供一些代码示例确实会有帮助 首先 您需要在 django 项目开
  • Chrome 扩展程序:无法加载 JavaScript 文件

    我发布了有关我的 Chrome 扩展程序的另一个问题here https stackoverflow com questions 28303597 tumblr dashboard modifications per chrome exte
  • 使用 apply 函数填充 NA 矩阵

    我想使用 apply 函数填充一个空矩阵 例如我的目的是简化下面的代码 tmp lt matrix NA 10 10 tmp 1 lt sample 1 500 10 tmp 2 lt sample 1 500 10 tmp 10 lt s
  • 在 PHP 中获取 SCOPE_IDENTITY()

    一直在尝试获取 SCOPE IDENTITY 插入数据库的最后一个 ID 并将其作为变量存储在我的 PHP 函数中 看了我在 stackoverflow 上可能找到的所有答案 但我仍然没有找到答案 这就是我目前所拥有的 Confirm bo
  • 创建现有 SOAP Web 服务的 REST 包装器

    我有一个 NET Web 服务 它是一个 SOAP 服务 我想将其转换为 REST 服务 我必须使用哪些选项来创建该中间件才能 接受请求并致电肥皂服务 翻译 SOAP 服务返回的结果 将响应返回给请求者 你有两个选择 1 只需创建一个具有两
  • 仅协议方案支持跨源请求,我该怎么办?

    我无法向 php 发送信息 它被阻止了 仅协议方案支持跨源请求 http data chrome chrome extension https 我使用了不同的 只有三分之一的电脑可以使代码工作 document on ready funct
  • Azure 服务总线主题分区

    我正在尝试向使用两者创建的主题发送消息启用重复检测 and 启用分区选项已选中 我不设置SessionId and PartitionKey我的属性BrokeredMessage实例 根据this https learn microsoft
  • 在 Android 中使用 AES/CBC/PKCS5Padding 解密不正确

    我在 Android v2 2 API 8 中编写了以下代码 其中输入纯文本 代码使用用户密码和随机盐对其进行加密 然后解密 运行代码后 我只得到部分正确的纯文本 例如用户输入 Msg 1 5 to encrypt 解密结果为 Msg15t
  • 将字节数组解码为Java中已压缩的位图

    我按以下方式压缩位图 Bitmap bmpSig getMyBitMap int size bmpSig getWidth bmpSig getHeight ByteArrayOutputStream out new ByteArrayOu
  • 如何在 dart 中创建安全的 http 服务器?

    我正在尝试将 dart http 服务器设置为仅使用 https 运行 所以我认为我需要使用HttpServer bindSecure https api dartlang org apidocs channels stable dartd
  • 在 shell 中导出函数

    请告诉我如何在父 shell bash sh 或 ksh 中导出函数 以便该函数可供从父进程启动的所有子进程使用 The export fBash 特有的功能 parent bin bash plus1 echo 1 1 echo plus
  • 无法在 Windows 计算机上安装 sasl-0.1.3 python 包

    我正在尝试在 Windows 7 64 位机器 上安装 sasl 0 1 3 python 包 它出现 C1083 致命错误 看起来 saslwrapper cpp 无法在 c 模块中包含 sasl sasl h 库 请帮助我解决问题 如果
  • boost::32 和 64 位进程之间的进程间共享内存

    我试图让 boost interprocess 在 32 位和 64 位进程之间共享内存 此错误跟踪器条目 https svn boost org trac boost ticket 5230表明这在我使用的 Boost 1 49 中可能是
  • 在模板中表达左移或右移的优雅方式

    我目前有一个模板函数 根据其模板参数 A 和 B 可以向左或向右移动值 template
  • 以编程方式设置 MailItem 的后续标志来完成?

    我试图找出如何在 Outlook 2007 中通过 VBA 将 MailItem 的后续标志设置为完成 谷歌搜索返回了大量在 Outlook 2003 及之前版本中有效的方法 例如 更改 MailItem 的 FlagStatus 属性的值
  • 如何处理静态存储持续时间警告?

    我是一个试图从书本上学习 C 的新手 下面的代码可以正常工作并产生预期的输出 但是定义的两行有警告engine and randomInt 使用静态存储持续时间初始化 引擎 可能会引发无法捕获的异常 如果我将第 7 行和第 8 行放在mai