我有以下代码:
#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)
我的代码出了什么问题?
你有点滥用三元运算符,因为任何给定的a ? b : c我都希望结果存储在某处,我不会推荐b或c有副作用.
您的问题的根源是三元运算符需要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)