2016-04-01 75 views
1

该订单隐式转换字母C++

char chValue = max('a', '6'); // returns 'a' 

int max(int nX, int nY) 
{ 
return (nX > nY) ? nX : nY; 
} 

铸信'a'其对应的ASCII码号码,然后将其比作整数?

+0

发布相关代码 - 什么是'max'声明? – MSalters

+0

@ MSalters好吧 –

回答

4

是的,因为max是一个函数,需要两个int S作为参数,炭a将获得implicitly convertedint,然后获得通过作为函数的参数。

+0

是的,它需要2个整数,并返回最大,并感谢 –

+0

@MekacherAnis很高兴我能够帮助。如果它解决了问题/回答了问题,请考虑接受答案。 – blazs

+0

没有“隐式演员”这样的事情。演员阵容是*显式*转换。 –

3

不完全。

字符常量'a''6'的类型是char,这是一个整数类型。他们已经表示整数值,并假设一个基于ASCII的实现,它们表示这些字符的ASCII值。这是在编译时确定的。

您的max函数需要两个int参数并返回int结果。 'a''6'隐含地转换为charint。 (此转换会产生一个具有不同表示形式但值相同的值。)演员表是一个明确的转换,用C风格的演员操作符(如(int)'a')或其中一个特定于C++的演员操作符(以在static_cast<int>('a')由于intchar都是整数类型,在此不再投。

(在C中,字符常量是int类型,并且不会有任何转换的。)

intmax()返回的结果然后被隐含地从int转换为char,结果存储在chValue

C++实际上并不需要用ASCII编码字符。例如,IBM大型机使用称为EBCDIC的不同字符集。 (在EBCDIC中,比较将以另一种方式进行,而chValue将是'6'而不是'a'。)