【发布时间】:2019-06-27 17:21:33
【问题描述】:
我偶然发现了一个奇怪的(对我来说)行为。这是我的代码:
struct A
{
operator unsigned long long() const { return 1ull << 32; }
};
A a1;
unsigned long long a2 = 1ull << 32;
bool b = rand() % 2;
auto c1 = b ? a1 : 0;
auto c2 = b ? a2 : 0;
为什么c1 的类型是int 而不是unsigned long long 像c2?为什么没有生成转换警告(VC++)?
我花了一天的时间才弄清楚我的申请出了什么问题。
【问题讨论】:
-
@πάνταῥεῖ 我相信重复问题的答案不能回答这里提出的问题。它们指的是值类型和提及转换,但没有解释为什么在这种情况下
unsigned long long被转换为int而不是int被提升到@987654329 @。投票重新开放,除非您提供指向链接问题答案所在位置的指针。 -
试试这个:
auto c1 = b ? a1 : 0ull;
标签: c++ conditional-operator conversion-operator