c++ - 是否可以将每个 if-else 结构替换为等效的条件表达式?

标签 c++ c conditional-operator

(我不是很需要这个答案,我只是好奇。)

是否可以使用条件运算符 ?: 将每个 if-else 结构替换为等效的条件表达式?

最佳答案

Does every if-else constructs can be replaced by an equivalent conditional expression using conditional operator?

不,你问反了。 if/else的“主体”包含语句,不可能将每条语句都变成一个表达式,比如try、while、break语句,以及声明。然而,许多“声明”实际上是变相的表达:

++i;
blah = 42;
some_method(a,b,c);

所有这些都是由一个表达式(分别为递增、赋值、函数调用)组成的语句,并且可以在条件语句中转换为表达式。

那么,让我们反过来问这个问题,因为听起来您真的很想知道 if/else 语句与三元条件表达式的等价程度:是否可以将每个条件表达式替换为等价的 if/else 语句? 几乎所有,是的。一个常见的例子是 return 语句:

return cond ? t : f;
// becomes:
if (cond) return t;
else return f;

还有其他的表达方式:

n = (cond ? t : f);
// becomes:
if (cond) n = t;
else n = f;

这开始指向无法轻易替换条件表达式的地方:初始化。由于您只能初始化一个对象一次,因此您必须将使用条件的初始化分解为使用显式临时变量:

T obj (cond ? t : f);
// becomes:
SomeType temp;
if (cond) temp = t;
else temp = f;
T obj (temp);

请注意,这更加繁琐/繁琐,如果 SomeType 不能默认构造和分配,则需要一些类型相关的东西。

关于c++ - 是否可以将每个 if-else 结构替换为等效的条件表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1818353/

相关文章:

python - 条件表达式/三元运算符

c++ - QT套接字读取丢失字节

c++ - do while 循环中的数组值未传递给下一个

swift - 为什么 Swift 的三元运算符对空格如此挑剔?

c++ - 返回类型 '?:'(三元条件运算符)

c - 返回设置为函数参数子字符串的局部指针是否安全?

c++ - 使用原生 CUDA 支持 CMake 在 C++ 目标中获取 CUDA 包含目录?

c# - 从非托管库的方法名称中获取参数类型?

c++ - 为什么 Vulkan 的 VkBool32 实现为 unsigned int?

c - 对大文件使用 libsodium XChaCha20-Poly1305