我是一个试图从书本上学习 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(使用前将#替换为@)