三元运算符使用时的奇怪错误

yau*_*ser 0 c++

我有以下代码:

#include <iostream>
int main() {
    int i = 3;
    do {
        (i == 3) ? (std::cout << "Is 3.\n") : ++i;
        ++i;

    } while ( i < 4 );
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并在响应中收到以下错误:

ternary.cc: In function ‘int main()’:
ternary.cc:5:43: error: invalid conversion from ‘void*’ to ‘int’ [-fpermissive]
Run Code Online (Sandbox Code Playgroud)

我的代码出了什么问题?

ta.*_*.is 5

你有点滥用三元运算符,因为任何给定的a ? b : c我都希望结果存储在某处,我不会推荐bc有副作用.

您的问题的根源是三元运算符需要b并且c是相同/等效类型.安德鲁的解释是他们需要能够"解决相同的......类型"可能更准确.

对于它的价值,你可以使用手法(甚至更多的滥用,取决于你的观点)来使代码工作:

#include <iostream>
int main() {
    int i = 3;
    do {
        (i == 3) ? (std::cout << "Is 3.\n", 0) : ++i;
        ++i;

    } while ( i < 4 );
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

或者,更明确地说,确保两者都是相同的类型:

#include <iostream>
int main() {
    int i = 3;
    do {
        (i == 3) ? (std::cout << "Is 3.\n") : (void*)++i;
        ++i;

    } while ( i < 4 );
    return 0;
}
Run Code Online (Sandbox Code Playgroud)