首页 > 解决方案 > 为什么 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
}

标签: c++classtemplatestype-conversionoperator-overloading

解决方案


operator<<forstd::string是一个模板,模板参数推导中不会考虑隐式转换,这会失败。

类型推导不考虑隐式转换(除了上面列出的类型调整):这是重载决议的工作,稍后会发生。

正如您所展示的,您可以显式转换Astd::string,或编写一个operator<<for A


推荐阅读