gpt4 book ai didi

c++ auto 多选

转载 作者:可可西里 更新时间:2023-11-01 18:15:50 27 4
gpt4 key购买 nike

在我的项目冒险过程中,我意识到如果我想根据条件初始化参数,我不能利用新的 c++11 auto 关键字的优势。

基本上我有这样一个代码片段:

auto foo = bar::getfoo();

需要更改为:

FOO foo
if(cond){
foo = bar::getfoo();
} else {
foo = baz::getotherfoo();
}

但是我需要用类型声明 foo(因为编译器不知道我将使用相同的类型返回。我想知道在这种情况下是否有任何使用 auto 关键字的方法。我想出的另一个解决方案是使用 ? : 具有这样代码的运算符:

auto foo = cond ? bar::getfoo() : baz::getotherfoo();

但是如果有两个以上的函数可供选择,我真的不想链接 ? : 运营商。我想知道在这种情况下是否有任何好的模式可以使用。

最佳答案

您的直觉是使用 ? : 运算符是正确的 - 只初始化一个变量一次并避免冗余的默认构造/赋值循环是个好主意。

一种方法是将 Foo 创建的选择推迟到一个小的效用函数:

auto make_foo() -> decltype(bar::getfoo()) 
{
if (condition1()) {
return bar::getfoo();
}
else if(condition2()) {
return baz::getfoo();
}
else {
return banana::getfoo();
}
}

void foo_test() {

auto foo = make_foo();
}

请注意,由于返回值优化,这是非常有效的。

如果你有 c++14,那就更好了——make_foo() 函数可以推断出它自己的返回类型:

auto make_foo() {
if (condition1()) {
return bar::getfoo();
}
else if(condition2()) {
return baz::getfoo();
}
else {
return banana::getfoo();
}
}

关于c++ auto 多选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30347182/

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