无内鬼,来点歪门邪道
最近用三目运算符用的有点上头,除了正常的赋值外,一些纯执行的函数(像是printf这种的无返回值or返回值一般无意义的函数)都想往三目运算符里塞。
//【正常情况】 #includeint main(){ bool flag=true; if(flag) printf("flag为真n"); else printf("flag为假n"); return 0; }
//【骚操作_三目运算符代替简单的if语句】 #includeint main(){ bool flag=true; flag?printf("flag为真n"):printf("flag为假n");//三目运算符代替if语句 printf("flag为%sn",(flag ? "真" : "假"));//这句没啥代表性,单纯是三目运算符的常规用法 return 0; }
//【骚操作_三目运算符代替简单的if语句】
int Test(){//非空类型的函数
printf("Test被执行n");
}
#include
int main(){
bool flag=true;
flag?Test():int();//三目运算符的前后值类型要一致。(这里的int()可以随便一个整数代替
return 0;
}
//【骚操作_void类型函数】 #includevoid Test(){//void类型的函数 printf("Test被执行n"); } int main(){ bool flag=true; flag?Test():void();//空变量~ 没想到吧 void (*func)()=flag?&Test:nullptr;//函数指针。这行语句可以偷懒写成这样:auto func=flag?&Test:nullptr; func?func():void();//特别的,对于函数指针来说,要提前判空才调用去调用 return 0; }
//【骚操作_逗号表达式】 #includevoid Test1(){//空类型的函数 printf("Test1被执行n"); } int Test2(){//非空类型的函数 printf("Test2被执行n"); return 0; } int main(){ bool flag=true; flag?(Test1(),Test2(),NULL):NULL;//逗号表达式~ 没想到吧 //逗号表达式仅最后的值有效,前面的单纯是执行而已。 //用逗号表达式弄一些恶臭代码也是挺好玩的,114514[doge] //欠揍一点的甚至可以把一堆的赋值或是函数(其实赋值也可以看做是函数的一种)放进一行: //(a=10),(b=5.6),(Sum(a,b)),(c='x'); return 0; }
这些歪门邪道有些就不知道符不符合代码规范,但一些复杂的地方还是建议码出好几行而不是压缩进一行里,毕竟多条语句塞进一两行后分析、排错和修正会很困难。



