C++中加上单引号的字符

学习c++的时候遇到一道题,如下:

template <typename T> T calc(T,int);
template <typename T> T fcn(T,T);
double d; float f; char c;
calc(c, 'c');     //正确
calc(d, f);      //错误
fcn(c , 'c');   //正确
fcn(d, f);     //错误

一开始不能理解为什么fcn(d, 'c') 是正确的,‘c'应该是指字符c的ascill码,应该是一个int型,而前面的c是一个字符型,但是它们使用的是同一个模板参数,所以它们应该为同一个类型才对。于是我用编译器测试输出,如下:

char c = 'a';
int b = 'a';
cout << c << endl << 'a' << endl << b;

结果为:a a 97。从这个结果,可以得出,对于’a'这个字符字面值常量,它既可以赋值给char型变量,也可以赋值给int型变量,所以反推,'a'可以根据需要视作char型或者int型。在上面的题中,calc(c, 'c')中的'c'就是一个int型,而fcn(c, 'c')中的'c'是一个char型。

对于为什么会有这种情况,我没有很深的了解,希望有大佬指教,谢谢~。
原文链接: https://www.cnblogs.com/honernan/p/12175412.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/191726

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午5:48
下一篇 2023年2月12日 下午5:48

相关推荐