我有以下代码:
#include <iostream>
int main() {
int i = 3;
do {
(i == 3) ? (std::cout << "Is 3.\n") : ++i;
++i;
} while ( i < 4 );
return 0;
}
并在回复中收到以下错误:
ternary.cc: In function ‘int main()’:
ternary.cc:5:43: error: invalid conversion from ‘void*’ to ‘int’ [-fpermissive]
我的代码出了什么问题?
答案 0 :(得分:5)
你滥用三元运算符,对于任何给定的a ? b : c
我希望结果存储在某处,我不建议b
或{ {1}}有副作用。
问题的根源在于三元运算符要求c
和b
为相同/等效类型。安德鲁的解释是他们需要能够“解析为同一类型......”可能更准确。
对于它的价值,你可以使用手法(甚至更多的滥用,取决于你的观点)to make the code work:
c
或者,more explicitly,确保两者的类型相同:
#include <iostream>
int main() {
int i = 3;
do {
(i == 3) ? (std::cout << "Is 3.\n", 0) : ++i;
++i;
} while ( i < 4 );
return 0;
}
答案 1 :(得分:4)
三元运算符要求两个备选方案解析为相同的数据类型。你不能以你的方式使用它。
编译器告诉你两种类型不同 - 它不能从void*
(第一条路径的类型)转换为int
(第二条路径的类型)。