c++ - 为什么 operator<< 不会将我的客户类对象隐式转换为字符串
问题描述
我有一个类实现了一个公共string
转换成员函数。当与 结合时operator<<(iostream &, xxx)
,我期望我的类会自动(隐式)转换为string
适合参数类型。
然而,事实并非如此。为什么,我不想写一个operation<<
函数。
#include <string>
#include <iostream>
using namespace std;
struct A {
operator string() { return "asd"; }
};
int main() {
cout << A() << endl; // error
cout << string(A()) << endl; // ok
}
解决方案
operator<<
forstd::string
是一个模板,模板参数推导中不会考虑隐式转换,这会失败。
类型推导不考虑隐式转换(除了上面列出的类型调整):这是重载决议的工作,稍后会发生。
正如您所展示的,您可以显式转换A
为std::string
,或编写一个operator<<
for A
。
推荐阅读
- php - PDO 和 php 中的 LIKE 参数不起作用
- ios - IOS:可以使用 NSFetchResults 控制器对 managedObject 属性的属性进行排序
- python - 如何访问 Django Form 中的请求对象
- c# - 强名称签名对此程序集 Antlr4.Runtime.Standard.dll 无效
- c# - MT4 Manager API 如何获取开仓头寸
- python-3.x - 如果数据框中存在值,则将值设为索引并用 1 替换值
- html - Html-loader + file-loader 未绑定正确的图像源
- clang - clang/llvm 编译致命错误:找不到“cstdarg”文件
- c# - 从json的listview中显示listview
- c++ - 可能平凡可构造类型的聚合初始化。隐藏基类可能吗?