首页 > 解决方案 > 三元运算符编译

问题描述

为什么这会在粗线处给出编译问题?

#include<iostream>

static int i = 10; 

int main() {
  **(i) ? (std::cout << "First i = " << i << std::endl) : ( i = 10);**
  std::cout << "Second i = " << i << std::endl;
}

编译消息:

test.c:8: error: invalid conversion from ‘void*’ to ‘int’

标签: c++

解决方案


您对三元运算符的使用有点奇怪:根据 的值i,您可以打印一些std::cout内容或为其分配一个新值。这些动作不通过表达式的返回值共享连接,所以不要这样做。使用三元运算符时,最好更接近其预期目的:两个可能的表达式的简短表示法,以及基于简单谓词的调度。例子:

const int n = i == 0 ? 42 : 43;

您的代码应如下所示:

if (i == 0)
   i = 10;
else
   std::cout << "First i = " << i << "\n";

原始代码段未编译的原因是三元运算符没有通用的返回类型。“通用”意味着两个表达式都可以转换为返回类型。例如,在const int n = i == 0 ? 42 : 43;返回类型中是int.


推荐阅读