gpt4 book ai didi

c++ - auto 和 static_casts - 好的做法

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:12:42 26 4
gpt4 key购买 nike

在 Scott Meyer 的 Effective Modern C++ 一书中,我们可以读到:

std::vector<bool> features(const Widget& w);
Widget w;

bool highPriority = features(w)[5];

processWidget(w, highPriority);

还有一个自动选项

auto highPriority = features(w)[5];

这会导致未定义的行为,因为 features()正在返回 std::vector<bool> ,使用 std::vector<bool>::reference 类型的代理对象从 opearator[] 返回值时.

作为解决方案,建议不要停止使用 auto , 但使用 static_casts .

因此 Scott Meyers 建议使用:

auto highPriority = static_cast<bool>(features(w)[5]);

代替:

bool highPriority = features(w)[5];

我的问题是:这两者之间的真正区别是什么?在我看来,两者是相同的,因为这两种方法都以完全相同的方式使重构变得更加困难(更改函数功能中的返回值类型不会使变量 highPriority 成为不同的类型)并且第二种方法编写起来更短。

最佳答案

如果你不喜欢features的界面,你可以在辅助函数中隐藏丑陋

bool is_high_priority(const Widget& w)
{ return features(w)[5]; }

现在是你的

auto highPriority = is_high_priority(w);

按预期工作。

关于c++ - auto 和 static_casts - 好的做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33012712/

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