gpt4 book ai didi

c++ - 为什么这个整数隐式转换不明确?

转载 作者:搜寻专家 更新时间:2023-10-31 02:20:16 25 4
gpt4 key购买 nike

我有以下简单的示例代码,两个整数类型的类构造函数:

struct Y
{
Y(int) {}
Y(long long) {}
};

调用自:

void foo()
{
char _char;
short _short;
int _int;
long _long;
long long _longlong;

Y y0 = _char;
Y y1 = _short;
Y y2 = _int;
Y y3 = _long;
Y y4 = _longlong;
}

当我在 64 位模式下使用 gcc 4.8.4 编译它时,我只得到一个错误:

error: conversion from ‘long int’ to ‘Y’ is ambiguous
Y y3 = _long;
^

我不明白的是为什么允许 _char_short 转换,但 _long 是不明确的。

最佳答案

在确定最佳可行候选者时,转化类型分为三个等级:Exact Match、Promotion(包括积分推广)和Conversion(包括积分转化)。

任何小于int 的整数类型都可以提升int,其他都是转换。因此对于 charshort,提升是最可行的候选者。对于 intlong long,我们简单地选择精确匹配。

然而,对于long,我们有两个选项都涉及一个整数转换。没有规则可以区分这两种转换中的哪一种“更好”,因此我们最终会产生歧义。您必须自己将 long 转换为所需的类型。

关于c++ - 为什么这个整数隐式转换不明确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32922731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com