在下面的代码中,RandomCharSource
应该根据请求简单地返回一个随机字符。它的构造函数正在初始化一个mt19937
,uniform_int_distribution<int>
和一个random_device
。但是,当我实例化我的对象时,我得到了段错误。正在初始化<random>构造函数中的类导致段错误
当我在下面的bar()
函数中手动创建这些随机类时,它工作正常。
我在做什么错?这里是否有初始化顺序问题?我正在使用GCC 4.7.3。
#include <random>
#include <iostream>
class RandomCharSource
{
public:
explicit RandomCharSource() : _re{_rd()}, _dist{0, 255} {};
inline char get_next_char() { return _dist(_re); };
private:
std::mt19937 _re;
std::uniform_int_distribution<int> _dist;
std::random_device _rd;
};
void foo()
{
RandomCharSource s;
std::cout << s.get_next_char() << std::endl;
}
void bar()
{
std::random_device _rd;
std::mt19937 _re{_rd()};
std::uniform_int_distribution<int> _dist{0,255};
std::cout << (char)_dist(_re) << std::endl;
}
int main()
{
bar(); // Works OK
foo(); // Segfault
return 0;
}
感谢您的参考。 – Steve