c++ - C2664:显式转换运算符未按预期转换
问题描述
我的测试班XString
有两个演员。但是编译器不使用显式强制operator const wchar_t*()
转换fooA
。为什么?
class XString
{
public:
operator const CString&();
explicit operator const wchar_t*();
};
void fooA(const wchar_t* s);
void fooB(const CString& s);
void test()
{
XString x;
CString c = x; //OK
fooA(x); //Error C2664: 'void fooA(const wchar_t *)': cannot convert argument 1 from 'XString' to 'const wchar_t *'
fooB(x); //OK
}
解决方案
由于operator const wchar_t*
is explicit
,转换不会隐式进行。这就是要点explicit
。
您可以使用以下命令强制转换static_cast
:
fooA(static_cast<const wchar_t*>(x));
推荐阅读
- pdf - 在Linux上多次将PDF插入另一个PDF
- ssl - 尽管 --insecure 和 w/o 代理出现 curl 错误:ssl3_get_record:wrong version number
- google-chrome-devtools - 我的开发工具缺少“重播 xhr”选项
- java - 在弹簧控制器上添加基于角色的逻辑
- r - mutate_impl(.data,dots)中的错误:列`..........`必须是长度...(组大小)或一,不是
- angular - 使用 concatMap 时如何取消订阅 valueChanges?
- ios - Azure 媒体服务 - iOS 上的字幕 - 本机而非 AMP
- http - 负载均衡器导致错误“无法加载资源”
- azure - Azure Cosmos 表 API 中的数据排序
- python - psycopg2 - 将字典列表插入 PosgreSQL 数据库。处决太多?