gpt4 book ai didi

c++ - 隐式转换为 std::string

转载 作者:IT老高 更新时间:2023-10-28 23:10:36 25 4
gpt4 key购买 nike

Possible Duplicate:
Overload resolution failure when streaming object via implicit conversion to string

我知道这样做不是一个好主意,但我真的很想知道下面的代码无法编译的原因(即为什么“没有可接受的转换”):

#include <iostream>
#include <string>


class Test
{
public:
operator std::string () const;
};

Test::operator std::string () const
{
return std::string("Test!");
}

int main ()
{
std::string str = "Blah!";
std::cout << str << std::endl;

Test test;

str = test;//implicitly calls operator std::string without complaining

std::cout << str << std::endl;

std::cout << test;//refuses to implicitly cast test to std::string

return 0;
}

在 Visual Studio 2010 上,我收到此错误:“error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'Test' (or there is no acceptable conversion)

<<运算符隐式转换 std::string到别的东西来利用它?如果是,我需要在我的类中重载什么运算符才能使这样的事情起作用?我拒绝相信我真的需要使用 operator char * .

最佳答案

operator<<(std::basic_ostream&, std::basic_string)是一个函数模板,并且在模板参数推导过程中不考虑用户定义的转换。你需要重载operator<<为你的类(class)。

当然,另一种选择是类型转换

std::cout << static_cast<std::string>(test);

关于c++ - 隐式转换为 std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13883067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com