C++ 条件运算符与 if-else

标签 c++ conditional operator-keyword if-statement

我一直在想这个问题。假设我们有一个变量,字符串权重和一个输入变量,int 模式,可以是 1 或 0。

使用是否有明显的好处:

weight = (mode == 1) ? "mode:1" : "mode:0";

结束

if(mode == 1)
    weight = "mode:1";
else
    weight = "mode:0";

超出代码可读性?速度是否受到影响,编译器是否以不同方式处理(例如某些 switch 语句转换为跳转表的能力)?

最佳答案

条件运算符和 if/else block 之间的主要区别在于,条件运算符是一个表达式,而不是一个语句。因此,只有少数地方可以使用条件运算符而不能使用 if/else。例如常量对象的初始化,像这样:

const double biasFactor = (x < 5) ? 2.5 : 6.432;

如果您在这种情况下使用 if/else,biasFactor 必须是非常量。

此外,构造函数初始化列表也调用表达式而不是语句:

X::X()
  : myData(x > 5 ? 0xCAFEBABE : OxDEADBEEF)
{
}

在这种情况下,myData 可能没有定义任何赋值运算符或非常量成员函数——它的构造函数可能是向它传递任何参数的唯一方法。

另外请注意,任何表达式都可以通过在末尾添加分号来转换为语句——反之则不然。

关于C++ 条件运算符与 if-else,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13545893/

相关文章:

c++ - 未定义对 `omp_get_wtime' 的引用

c++ - 多行原始字符串文字作为预处理器宏参数

mysql 条件插入 - 如果不存在插入

r - 根据滚动日期内存在的条件创建新列

c++ - 运营商重载奇怪的输出

c++ - boost::log::r​​ecord_view 赋值运算符

PHP 奇怪的语法 - 它叫什么?

c++ - 如何在派生类中调用基类的<<运算符

haskell - 封闭括号内的美元符号

c++ - 我很困惑为什么我的 fillDeck 函数说, "assigning to ' char *' from incompatible type ' const char *”