c++ - 三元运算符编译
问题描述
为什么这会在粗线处给出编译问题?
#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’
解决方案
您对三元运算符的使用有点奇怪:根据 的值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
.
推荐阅读
- .net - 如何通过 HTTP Post 向 SSRS 发送参数值数组?
- java - session.merge() 没有更新实体
- r - Trace_explorer 聚类
- python - 为什么我得到 __init__() 需要 1 个位置参数但给出了 2 个?
- jquery - jquery dataTable 分页 css
- c# - C#如何在DataGridView中显示图片
- smooch - Smooch - 我如何更新(更改)历史中的对话之一
- pycharm - 如何在 pycharm 中访问函数或包文档
- c# - 如何将新添加的行直接识别到datagridview - c#
- c# - 使用 LINQ 仅获取每个元素的最新 JOINed 项