如果 C++ 中一个变量为空,是否有 shorthand 方法打印不同的变量?

Is there a shorthand way to print a different variable if one variable is empty in C++?

我正在尝试用 C++ 编写一个缩小的 FizzBu​​zz 程序,因为我刚刚在学习它。我想知道是否有一种 shorthand 的方式来表达“如果这个字符串存在,return 这个字符串,否则,return 这个下一部分”

在 JavaScript 中,使用 || 运算符的工作方式与我想的一样:

function fizzbuzz() {
  const maxNum = 20; // Simplified down to 20 just for example
  for (let i = 1; i <= maxNum; i++) {
    let output = "";
    if (i % 3 == 0) output += "Fizz";
    if (i % 5 == 0) output += "Buzz";
    console.log(output || i); // If the output has something, print it, otherwise print the number
  }
}

fizzbuzz();

当我在 C++ 中尝试这个时,

#include <iostream>
#include <string>
using namespace std;

int main() {
    int maxNum = 100;
    string output;
    for (int i = 1; i <= maxNum; i++) {
        output = "";
        if (i % 3 == 0) output += "Fizz";
        if (i % 5 == 0) output += "Buzz";
        cout << output || i << endl; // I've also tried the "or" operator instead of "||"
    }
    return 0;
}

我收到这个错误:

main.cpp:12:32: error: reference to overloaded function could not be resolved; did you mean to call it?
        cout << output || i << endl;
                               ^~~~

我知道你可以在 cout 之前说这个(并更改 cout 行):

if (output == "") output += to_string(i);

但我的问题是在 C++ 中是否有 shorthand 方法来执行此操作,就像在 JavaScript 中一样,或者我是否必须有类似于 if 的方法以上声明?

在 C++ 中,您可以只使用三元运算符。

三元运算符的工作方式如下(与JavaScript中的三元非常相似):

condition   ? "truthy-return" : "falsey-return"
^ A boolean    ^ what to return   ^ what to return
  condition      if the condition   if the condition
                 is truthy          is falsey

那个三元示例等同于此(假设在一个 return 是一个字符串的函数中):

if (condition) {
  return "truthy-return";
} else {
  return "falsey-return";
}

C++ 确实有它的怪癖,因为它是一种静态类型的语言:

  1. std::string 的值为 ""(空字符串)不被视为 false,布尔值。通过stringName.length()求字符串长度,如果长度为0,则return为0。
  2. :两边的return类型必须相同,所以必须将i转成字符串std::to_string(i)
  3. 最后,这个三元运算符必须在它自己的括号内,像这样:(output.length() ? output : to_string(i))

代码:

#include <iostream>
#include <string>
using namespace std;

int main() {
    int maxNum = 100;
    string output;
    for (int i = 1; i <= maxNum; i++) {
        output = "";
        if (i % 3 == 0) output += "Fizz";
        if (i % 5 == 0) output += "Buzz";
        cout << (output.length() ? output : to_string(i)) << endl;
    }
    return 0;
}