如何解决在无分支POV中逻辑和&很好地替代了if语句
所以,我有时看到这样的代码:
some_conditions && something();
用于代替
if(some_conditions) something();
现在,我想知道以下哪个版本最有效/更适合使用:
std::vector<int> v{};
v.size() < 10 && (v.push_back(2),1); // using the comma operator since push_back does not returns anything and so can't be evaluated to bool
或
std::vector<int> v{};
if(v.size() < 10) v.push_back(2);
解决方法
您拥有的代码段不是无分支的,因为它仍然基于第一次比较的结果执行条件逻辑。两者之间生成的代码通常是相同的。
任何值得精打细算的优化编译器都应产生相同的程序集。如果比较GCC on godbolt的输出,则两个表达式都产生相同的程序集(只是区别是分支名称),并且两种情况都产生分支。
通常,您应该着眼于编写可读性强的代码,而不用担心这两个代码中的哪一个“性能更好”。易于阅读和维护代码的价值更大。只有在确定(分析后)确定所编写的代码不是最优的并引起问题之后,才值得对代码进行优化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。