繁体   English   中英

在C ++中涉及有符号和无符号类型的表达式

[英]Expression involving signed and unsigned types in c++

我正在研究C ++语言,我的书中的一条建议是不要混入带符号和无符号类型的表达式,因为带符号的类型将转换为无符号的类型。

例如 :

unsigned int u = 10; 
int a = 42; 
std::cout << u - a << std::endl; // here the value will wraps around 

在此程序之后,如果我尝试使用typeid终止a的类型,则结果为int,为什么? 为什么a的类型不是更无符号的,而是返回int?

该变量不会转换为无符号。 它的值将转换为无符号以便在表达式中使用。 也就是说,当您这样做时:

std::cout << u - a << std::endl;

a创建一个临时的,无名的无符号int,然后从u减去它。 好像您已经这样做:

std::cout << u - (unsigned int)a << std::endl;

或这个:

unsigned int __nameless__ = a;
std::cout << u - __nameless__ << std::endl;

除了__nameless__变量实际上不存在于该表达式之外。

变量的类型不变。 当计算表达式时,子表达式可以转换或强制转换为不同的类型。 因此,在示例u - a中,将转换右侧的子表达式以匹配左侧的子表达式的类型,但是,从概念上讲,这是另一种类型的不可见中间结果,而不是更改的原始基础变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM