return a == 1 ? 2 : 3; //返回的2
return a = 1 ? 2 : 3;//在c#中程序会报错
由此上述两个表达式,我整理了一下关于这个运算符相关的点
////////////////////////////////////////////////////////////////////////////////////
由于本人之前是编写一点点c++的代码,所以去翻了翻c++的书籍和编写了一些测代码,也编写了一些c#的测试代码作比较
return a == 1 ? 2 : 3; //返回的2
return a = 1 ? 2 : 3;//在c#中程序会报错
对一些编程的细节概念其实不是很熟,所以今天翻了翻。。。
(1) a == 1 ? 2 : 3
在这行代码里面 其实包含了两个运算符 ==
和?:
这两个是有优先级的,所以顺序是这样的
if(a==1)//a==1,返回值true
{return 2}//整个表达式返回2
(2)a = 1 ? 2 : 3 在这行代码里面 =
和?:
这两个是有优先级的,先执行?:
再=
if(1)//1转换成bool类型为true
{return 2}//整个表达式返回2
(3)(a=1)?2 : 3在这行代码里面 ()
=
和?:
这三个是有优先级的,先执行()
再?:
if(a=1)//赋值运算符返回的时a的引用,则`()`里面还是`1`,转换成`bool`为`true`
{return 2}//整个表达式返回2
!!上述代码是在c++环境中进行编写,语法遵循c++,但是c#就有所不同了!!
c#和c++代码对比
(1)c++中
#include "stdafx.h"
#include<iostream>
int _tmain(int argc, _TCHAR* argv[])
{
using namespace std;
if(1) {cout<<"1-ok"<<endl;}//pass
if(0) {cout<<"0-ok"<<endl;}//fail
if(-1){cout<<"-1-ok"<<endl;}//pass
}
(2)在c#中
所以c#中时不可以将int型转换成bool型的
上述为个人理解,批判浏览