gpt4 book ai didi

c++ - 对临时对象的静态常量引用

转载 作者:太空狗 更新时间:2023-10-29 21:51:01 31 4
gpt4 key购买 nike

我有一个模板类,它依赖于两个模板参数来计算它的值,但只有一个用于构造。我想在其生命周期内减轻对第二个的依赖。我正在考虑通过使用模板化静态函数来计算值然后创建实例来做到这一点。这个类中的所有成员都是 const POD 类型,并且在应用程序启动时会创建很多这个类。

template < class member >
class FOO {
public:
FOO() : a(7) {};

template < class scope >
static FOO CreateFOO()
{
return FOO();
};

private:
const int a;
};

template < class member, class scope >
const FOO< member >* function()
{
static const FOO< member >& temp = FOO< member >::CreateFOO< scope >();

return &temp;
}

int main() {

const FOO<int>* b = function< int, int >();

return 0;
}

我考虑过移动语义,但因为我只包含 const POD 类型,所以实际上没有任何交换和移动,只是复制和销毁。以上是否合理/有效?我读过的所有内容都表明没问题!有更好的方法吗?

最佳答案

这应该没问题。由于引用 temp 绑定(bind)到临时对象,因此临时对象的生命周期延长到 temp 的生命周期,它延伸到 main() 结束之后

但我看不出有任何理由在那里使用引用。为什么不只是:

{
static const FOO<member> foo = FOO<member>::CreateFOO<scope>();
return &foo;
}

您的编译器可能会优化复制构造函数。如果不是,你说这都是 POD 成员,所以没什么大不了的。

无论哪种方式,您都可能担心 static deinitialization order fiasco .或者您可能确定它们永远不会被析构函数使用。

关于c++ - 对临时对象的静态常量引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4615491/

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