Tre*_*key 7 c++ overloading wchar-t implicit-conversion
以下C++程序编译时没有错误:
void f(char){}
void f(signed char){}
void f(unsigned char){}
int main(){}
Run Code Online (Sandbox Code Playgroud)
wchar_t同一程序的版本不是:
void f(wchar_t){}
void f(signed wchar_t){}
void f(unsigned wchar_t){}
int main(){}
Run Code Online (Sandbox Code Playgroud)
错误:重新定义'void f(wchar_t)'
void f(签名的wchar_t){}
似乎wchar_t就是这样unsigned.
为什么重载不一致?
的chars为所有不同类型的,并且可以被重载
[basic.fundamental]/1
[...] Plain
char,signed char和unsigned char三种不同的类型,统称为窄字符类型.[...]
wchar_t也是一个不同的类型,但它不能用signed或限定,unsigned只能与标准整数类型一起使用.
[dcl.type]/2
作为一般规则,最多一个类型说明符被允许在完全DECL说明符-SEQ声明的或在一个 类型说明符序列或尾随类型说明符-SEQ.此规则的唯一例外情况如下:
[...]
signed或unsigned可以结合char,long,short,或int.
[dcl.type.simple]/2
[...]表9总结了简单类型说明符的有效组合及其指定的类型.
签名wchar_t是实现定义的:
[basic.fundamental]/5
[...] Type
wchar_t应具有与其他整数类型相同的大小,符号和对齐要求(3.11),称为其基础类型.
| 归档时间: |
|
| 查看次数: |
975 次 |
| 最近记录: |