c++ - 为什么 cout 与三进制和 int 一起使用时会打印 char 的 ascii 值?
问题描述
为什么此代码生成 42012 而不是 *012?我可以看到它正在将星号转换为其 ASCII 值,但为什么呢?
vector<int> numbers = {-1,0,1,2};
for(int num: numbers){
cout << (num == -1 ? '*' : num); //42012
}
for(int num: numbers){
if(num == -1) cout << '*'; //*012
else cout << num;
}
如果我使用正常的 if else 语句,它就可以工作。为什么?
解决方案
三元表达式返回其真部分和假部分的“共同类型”,和之间的共同类型char
是int
,int
所以'*'
提升为int
。
推荐阅读
- javascript - 开玩笑检查是否调用了函数
- python - 垂直放置“add_vline”注释文本并在垂直线上居中点
- python - os.rename 移动文件,然后在 2 秒后撤消 - Google Drive?
- tensorflow - 自动编码器真的需要 ReturnSequences 吗?
- mysql - MySQL 暂时禁用自动增量 ID 进行数据迁移
- javascript - 需要用 x[y] 澄清事情
- c# - DataTemplate OnSelectTemplate 不工作 Xamarin.Forms
- laravel - Laravel - 如何根据通过 URL 参数传递的不记名令牌获取用户信息?
- python - 在sharepoint office365 REST Python Client上上传不同大小的文件
- c# - 如何使用 dotnet 在 linux 二进制文件中应用 PIE(位置独立可执行文件)选项?