gpt4 book ai didi

c++ - 根据条件声明大变量的方法

转载 作者:行者123 更新时间:2023-12-02 10:51:16 25 4
gpt4 key购买 nike

我正在阅读 C++ 核心指南并遇到了这条规则:“在有一个值可以用来初始化变量之前不要声明变量”https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#es22-dont-declare-a-variable-until-you-have-a-value-to-initialize-it-with

它将以下代码描述为错误的:

SomeLargeType var;

if (cond) // some non-trivial condition
Set(&var);
else if (cond2 || !cond3) {
var = Set2(3.14);
}
else {
var = 0;
for (auto& e : something)
var += e;
}

不幸的是,这一点未能描述解决这个问题的方法。有时您只需根据条件以不同方式初始化大对象。我想到的唯一规避方法是:

SomeLargeType * var;

if (cond) // some non-trivial condition
var = new SomeLargeType(123);
else if (cond2 || !cond3) {
var = new SomeLargeType(3.14);
}

但是,即使我使用智能指针,这也感觉有些不必要/不安全,最重要的是,比最初的方式更糟糕。

最佳解决方案是什么?

最佳答案

您可以使用函数。另外,不要使用带有所有权的裸指针(我认为也有一个指南)。示例:

std::unique_ptr<SomeLargeType>
make_something(bool cond, bool cond23)
{
if (cond)
return std::make_unique<SomeLargeType>(123);
else if (cond23)
return std::make_unique<SomeLargeType>(3.14);
else
return nullptr;
}

// usage
std::unique_ptr<SomeLargeType> var = make_something(cond, cond2 || !cond3);

如果这个函数无法重用,那么 lambda 可能比较合适,如 Sopel 所示

关于c++ - 根据条件声明大变量的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58693018/

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