gpt4 book ai didi

c++ - const 引用是全局常量的良好实践吗?

转载 作者:行者123 更新时间:2023-12-04 07:19:12 26 4
gpt4 key购买 nike

试图找出如何有效和安全地引用在编译时初始化的全局自定义类型常量。我想避免复制 Foo,因为我将创建大量 Bar 实例,而 Foo 比此处显示的要复杂一些。保持从 Bar 到 Foo 的 const 引用似乎是安全的(或者是吗?)但同时我不知道如果可能的话如何防止“badBar”的使用。有什么建议?

class Foo
{
int a_, b_;
public:
constexpr Foo(int a, int b) : a_(a), b_(b) {}
};

inline constexpr Foo kFoo{1, 2};

class Bar
{
const Foo& foo_;
public:
Bar(const Foo& foo) : foo_(foo) {}
const Foo& foo() { return foo_; }
};

int main() {
Bar goodBar(kFoo);
Bar badBar(Foo(3, 4)); // ouch
return 0;
}

最佳答案

是的,保持对全局定义的常量变量的引用是安全的,因为它总是有效的。
您可以直接初始化成员:

class Foo
{
int a_, b_;
public:
constexpr Foo(int a, int b) : a_(a), b_(b) {}
};

inline constexpr Foo kFoo{1, 2};

class Bar
{
const Foo& foo_=kFoo;
};
世界其他地方不必知道它的存在,并且可以生成 Bar 的 ctor。更简单。
虽然感觉有点多余,但哪里都可以写 foo_ ,你也可以写 kFoo .也许我误解了你的问题?

关于c++ - const 引用是全局常量的良好实践吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68613556/

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