Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么隐式转换为std::string不能与调用的运算符_C++_Type Conversion_Implicit Conversion - Fatal编程技术网

C++ 为什么隐式转换为std::string不能与调用的运算符

C++ 为什么隐式转换为std::string不能与调用的运算符,c++,type-conversion,implicit-conversion,C++,Type Conversion,Implicit Conversion,首先,我使用一个用户定义的convert函数隐式地将一个对象转换为int,然后将其插入cout 为什么隐式转换不会发生在第二种情况下 因为是一个模板函数 这意味着给定T a;库特 为什么隐式转换不会发生在第二种情况下 因为是一个模板函数 这意味着给定T a;若要在第一种情况下获得编译器错误,请使用显式运算符int{return 0;}。我投票重新打开该问题,因为已经提供了MCVE,现在问题已经很清楚了。若要在第一种情况下获得编译器错误,请使用显式运算符int{return 0;}.我投票重新开始

首先,我使用一个用户定义的convert函数隐式地将一个对象转换为int,然后将其插入cout 为什么隐式转换不会发生在第二种情况下

因为是一个模板函数

这意味着给定T a;库特 为什么隐式转换不会发生在第二种情况下

因为是一个模板函数


这意味着给定T a;若要在第一种情况下获得编译器错误,请使用显式运算符int{return 0;}。我投票重新打开该问题,因为已经提供了MCVE,现在问题已经很清楚了。若要在第一种情况下获得编译器错误,请使用显式运算符int{return 0;}.我投票重新开始这个问题,因为已经提供了MCVE,现在问题已经很清楚了。
#include <iostream>

using namespace std;

class T {
public:
    operator int () {
        return 0;
    }
};

int main()
{
    T a;
    cout << a << endl;
    return 0;
}
#include <iostream>
#include <string>

using namespace std;

class T {
public:
    operator string () {
        return "";
    }
};

int main()
{
    T a;
    cout << a << endl;
    return 0;
}
template <class CharT, class Traits, class Allocator>
std::basic_ostream<CharT, Traits>& 
    operator<<(std::basic_ostream<CharT, Traits>& os, 
               const std::basic_string<CharT, Traits, Allocator>& str);