为什么我不能在我的三元表达式中使用 return,但我可以在常规的 if-else 语句中使用?
Why can't I use return in my ternary expression but I can in a regular if-else statement?
我正在编写一个简单的阶乘函数来练习 c++ 中的递归。我想用三元格式写它,但它不起作用,所以我先把它写出来,看看它是否以更传统的方式工作。
三元格式:
num > 1 ? num * factorial(num-1) : return 1;
传统的:
if (num > 1){
return num * factorial(num-1);
}
else {
return 1;
}
我只是打印阶乘 (5( 的结果,它应该显示 120。虽然它适用于第二个,但它不适用于第一个。为什么我不能使用三元格式的返回?或者,我用错了?
您可以在条件形式中使用阶乘,但不能使用 return
. return
是一个语句,而条件运算符需要表达式。方便的是,条件运算符本身是一个表达式,它允许您执行此操作。
return num > 1 ? num * factorial(num-1) : 1;
请注意,我们返回的是整个表达式的结果,而不仅仅是num > 1
段。如果我想用括号冗余,我可以这样做,这在语义上是等效的。
return (num > 1 ? num * factorial(num-1) : 1);
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 为什么我可以通过引用修改常量返回
- 我可以在 C++ 中的函数体之外进行操作吗?
- 我可以重新分配/覆盖std::字符串吗
- C++-我可以创建另一个类的成员并在构造函数中使用它吗
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 我可以检测和更改 gcc/g++ 中结构的当前数据对齐设置吗?
- 为什么我可以使用比分配的内存更多的内存
- 在一个读写器队列中,我可以用volatile替换原子吗
- 我可以把基础班提升为儿童班吗
- 我可以做些什么来消除或最小化这种将提供相同功能和行为的代码重复
- 我可以使用什么来停止循环而不是"返回 0"?
- 为什么我不能在我的三元表达式中使用 return,但我可以在常规的 if-else 语句中使用?
- 我可以/应该使用 std::exception's 进行常规错误处理吗?
- 我可以总是用常规指针代替输入迭代器吗
- 为什么我可以从{}初始化一个常规数组,但不能从std::数组初始化?