提问者:小点点

为什么具有固定char基础类型的枚举的值会解析为fct(int)而不是fct(char)?


null

null

#include <iostream>

enum charEnum : char { A = 'A' };

void fct(char)      { std::cout << "fct(char)"      << std::endl; }
void fct(int)       { std::cout << "fct(int)"       << std::endl; }
void fct(long long) { std::cout << "fct(long long)" << std::endl; }

int main() 
{
    fct('A');
    fct(A);
}

null

null

null

null

两个相关的标准摘录是§7.2/9:

null

null

null

null

null

null


共2个答案

匿名用户

null

null

在C++03编译器中,会选择int,因为它是列表中的第一个。

null

null

null

null

null

匿名用户

null

null

“基础类型为固定(7.2)的非作用域枚举类型的prvalue可以转换为其基础类型的prvalue.此外,如果可以对其基础类型应用整数提升,则基础类型为固定的非作用域枚举类型的prvalue也可以转换为提升后的基础类型的prvalue.”

null

null

null

null

转换顺序按照13.3.3.2进行排序。特别地,13.3.3.2/3提到,在以下情况下,转换序列S1优选于转换序列S2:

“S1的职级[即晋升,转换等]优于S2的职级,或S1和S2具有相同的职级,并可根据下一段的规则加以区分,或,如果不是这样,则[...]”

null

null

null

null

然而,就我个人而言,我同意需要进行更改,使到非作用域枚举的固定基础类型的转换比其他可能的转换更可取。