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