卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章64334本站已运行4115

一些关于C/C++三元运算符的有趣观察

一些关于C/C++三元运算符的有趣观察

我们知道三元运算符是代替 if..else 子句实现的。它由 ?: 表示。 '?'符号相当于 if 部分,':' 相当于 else 部分。以下 3 个程序解释了三元运算符情况下的一些有趣的观察结果。

以下程序能够编译,没有任何错误。三元表达式的返回类型预计为 float(与 exp2 一样),并且 exp3(即文字零 - int 类型)能够隐式转换为 float。

#include <iostream>
using namespace std;
int main(){
   int test1 = 0;
   float fvalue = 3.111f;
   cout<< (test1 ? fvalue : 0) << endl;
   return 0;
}

以下程序将无法编译,原因是编译器无法定位或找到三元表达式的返回类型,或者exp2(char数组)和exp3(int)之间无法进行隐式转换。

#include <iostream>
using namespace std;
int main(){
   int test1 = 0;
   cout<< test1 ? "A String" : 0 << endl;
   return 0;
}

以下程序可能能够编译,但在运行时会失败。三元表达式的返回类型被限制为(char *)类型,但表达式返回 int,因此程序失败。从字面上看,程序尝试在执行时或运行时打印第 0 个地址处的字符串。

#include <iostream>
using namespace std;
int main(){
   int test1 = 0;
   cout << (test1 ? "A String" : 0) << endl;
   return 0;
}
我们可以观察到exp2被视为输出类型,exp3将能够在执行时或运行时转换为exp2。如果转换被视为隐式的话,编译器将 插入转换的存根。如果将转换视为显式操作,编译器将抛出错误。如果任何编译器能够忽略此类错误,则程序可能在执行时或运行时失败。
卓越飞翔博客
上一篇: 如何在 C# 中获取 Unix 时间戳
下一篇: C# 字符串属性
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏