【发布时间】:2015-12-27 16:07:41
【问题描述】:
以下 C++ 程序编译没有错误:
void f(char){}
void f(signed char){}
void f(unsigned char){}
int main(){}
同一程序的wchar_t版本没有:
void f(wchar_t){}
void f(signed wchar_t){}
void f(unsigned wchar_t){}
int main(){}
错误:重新定义“void f(wchar_t)”
void f(signed wchar_t){}
看来wchar_t 是unsigned。
为什么过载时会出现不一致?
【问题讨论】:
-
这在我看来不像合法的 C。是 C++ 吗?
-
@ArlieStephens 是的,最好删除 C 标签。不需要任何头文件的 C++。
-
wchar_t允许根据 [basic.fundamental] 签名或未签名。 -
@chris 我明白了。所以 wchar_t 是两者之一,而 char 两者都不是。
-
wchar_t与char的不同之处在于char可能是有符号类型或无符号类型,但仍是不等同于signed char和unsigned char的类型,与 @ 不同987654332@ 可能是有符号或无符号类型,无法指定单独的signed wchar_t或unsigned wchar_t类型。
标签: c++ implicit-conversion overloading wchar-t