gpt4 book ai didi

c++ - 在 C++ header 中定义的函数中重用对象

转载 作者:太空狗 更新时间:2023-10-29 23:49:22 26 4
gpt4 key购买 nike

我在头文件中有一个函数库,其中包括以下函数:

// Get a normally distributed float value in the range [0,1].
inline float GetNormDistrFloat()
{
std::random_device _RandomDevice;
std::normal_distribution<float> _NormalDistr(0.5, 2.0);

float val = -1;
do { val = _NormalDistr(_RandomDevice); } while(val < 0.0f || val > 1.0f);

return val;
}

这很好用,但是,我不想每次调用此函数时都创建 std::random_devicestd::normal_distribution 对象 GetNormDistrFloat().

用 C++ 处理这个问题的“最佳”(正确)方法是什么?我试图将这两个对象定义移到函数之外,但这导致了链接器错误。我是否必须为此 header 创建一个 .cpp 文件并在那里初始化对象?

最佳答案

您可以将它们标记为静态变量,这使它们的行为几乎像全局变量,但只能在函数内部访问:

void bar() {
static Foo foo_instance;
// Foo gets initialized only once
}

主要区别在于初始化。全局变量在启动时初始化,静态变量在首次访问时初始化。

你也可以将它们设为全局变量,只要确保你没有在头文件中定义它们,而是将它们声明为外部的:

// Header file
extern Foo foo_instance;

// Cpp file
Foo foo_instance;

局部静态对象的初始化是线程安全的,但其他一切都不是。

关于c++ - 在 C++ header 中定义的函数中重用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42489013/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com