gpt4 book ai didi

C++ 声明 const 变量,但推迟其初始化?

转载 作者:行者123 更新时间:2023-11-28 01:44:33 25 4
gpt4 key购买 nike

上下文:

一个函数(来自一些我无法修改的 API)从 objectRegistry 返回一个对对象的常量引用:

const Foo& f(args)

我需要获取常量 Foo 对象,但我需要基于某些条件的 Foo 的不同实例。

天真地,我会先声明 f 返回什么,然后调用 f 来初始化变量 foo。

const Foo& foo; // Declare
if( something == true ){
foo = f(arg1); // Initialise
}else{
foo = f(arg2); // Initialise
}
// It is guaranteedly initialised in this line

这是行不通的,因为这将首先(我假设)调用一个带有空参数的构造函数。之后,您将拥有一个无法覆盖的 const 对象。相反,编译器会立即报错:error: 'foo' declared as reference but not initialized。如果将 foo 声明为 const Foo foo;

,也会出现同样的问题

以下确实有效。

const Foo* fooPtr;
if( something == true ){
fooPtr = &f(1);
}else{
fooPtr = &f(2);
}
const Foo& foo = *fooPtr;

问题:

  • 除了丑陋之外(imo),这种方法还有什么问题吗?
  • 是否有更好的方法达到相同的目的?

有些相关的主题:

最佳答案

你可以使用包装器

const Foo& getFooWrapper(something) {  // assume returning a ref is fine,                                         
if (something) return f(1); // because f already returns a const&
else return f(2);
}

然后简单地

const Foo& foo = getFooWrapper();

关于C++ 声明 const 变量,但推迟其初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45693905/

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