如果我写
,将会是什么输出在C ++中if(5)
执行时没有任何问题,但在C#中不会以相同的方式运行。
if(func()){} //in C# it doesn't runs Why how does C# treats void and how in Turbo C++
void func()
{
return;
}
if(null==null){}//runs in C#
修改
if(printf("Hi"){} //will run and enter into if statement
if(printf(""){}//will enter into else condition if found.
此问题不适用于那些不了解Turbo Compiler的人
答案 0 :(得分:5)
在C#中,if
语句中的条件类型必须可隐式转换为bool
。这减少了各种情况下的错误,基本上是一件好事。它会阻止这样的事情编译:
int x = ...;
if (x = 10) // Valid in C / C++, not in C#
即使在C和C ++中,如果你有一个合理的警告级别,一个不错的编译器会在上面的行上发出警告。
如果void
版本在C ++中工作,我感到很惊讶......
答案 1 :(得分:3)
与C / C ++不同,C#条件只能应用于布尔值 请注意,void函数没有返回值,因此不能对其应用任何条件。
答案 2 :(得分:3)
void函数根本不返回任何内容,因此无法使用if语句检查其返回值。
即使C ++也不会让你这样做。
答案 3 :(得分:1)
在C / C ++中,非零整数值与逻辑true相同。原因是C / C ++没有定义布尔类型,所以整数被用作布尔变量。 后来,人们发现当编译器试图找到适当的函数重载版本时,这种隐式类型转换会导致意外行为,因此在C#中不会重复该错误。
要在C#中获得相同的行为,请写if (x!=0) { ... }
答案 4 :(得分:0)
在C和C ++中,int
,指针和大多数其他类型都隐式转换为bool
。
为了清楚起见,C#的设计者选择了而不是。
所以用
int i = 1;
int* P = null;
if (i && p) { } // OK in C++
if (i != 0 && p != null) { } // OK in C++ and C#