当二元运算符两边的签名不同时,促销规则如何工作?
考虑以下程序:
// http://ideone.com/4I0dT#include <limits>#include <iostream>int main(){ int max = std::numeric_limits<int>::max(); unsigned int one = 1; unsigned int result = max + one; std::cout << result;}
和
// http://ideone.com/UBuFZ#include <limits>#include <iostream>int main(){ unsigned int us = 42; int neg = -43; int result = us + neg; std::cout << result;}
+运算符如何“知道”返回哪个正确的类型?一般的规则是把所有的参数转换为最广泛的类型,但在这里没有明确的“赢家”之间int
和unsigned int
。在第一种情况下,unsigned int
必须选择作为结果operator+
,因为我得到了结果2147483648
。在第二种情况下,它必须选择int
,因为我得到了结果-1
。然而,在一般情况下,我没有看到这是如何可判定的。这是我看到的未定义的行为还是其他什么?
忽然笑
侃侃无极
慕村225694
相关分类