栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C++】三目运算符 与 函数 与 空变量 与 逗号表达式 的奇怪用法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C++】三目运算符 与 函数 与 空变量 与 逗号表达式 的奇怪用法

无内鬼,来点歪门邪道



最近用三目运算符用的有点上头,除了正常的赋值外,一些纯执行的函数(像是printf这种的无返回值or返回值一般无意义的函数)都想往三目运算符里塞。

//【正常情况】
#include 
int main(){
	bool flag=true;
	if(flag)
		printf("flag为真n");
	else
	    printf("flag为假n");
	return 0;
}
//【骚操作_三目运算符代替简单的if语句】
#include 
int 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类型函数】
#include 
void 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;
}
//【骚操作_逗号表达式】
#include 
void 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;
}

这些歪门邪道有些就不知道符不符合代码规范,但一些复杂的地方还是建议码出好几行而不是压缩进一行里,毕竟多条语句塞进一两行后分析、排错和修正会很困难。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/433591.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号