gpt4 book ai didi

C++ 将自定义类型的转换运算符重载为 std::string

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

我希望有人能够回答为什么以下内容不起作用。不过请耐心等待,我仍然是一个菜鸟……我只是无法深入了解以下原因

using namespace std;
#include <string>
#include <iostream>

class testClass
{
public:
operator char* () {return (char*)"hi";};
operator int () {return 77;};
operator std::string () {return "hello";};
};

int main()
{
char* c;
int i;
std::string s = "goodday";

testClass t;

c = t;
i = t;
s = t;

cout<< "char: " << c << " int: " << i << " string: "<<s<<endl;

return 0;
}

给我一​​个编译时错误:

myMain.cpp: In function ‘int main()’:
myMain.cpp:23: error: ambiguous overload for ‘operator=’ in ‘s = t’
/usr/include/c++/4.2.1/bits/basic_string.h:500: note: candidates are: std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(const std::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
/usr/include/c++/4.2.1/bits/basic_string.h:508: note: std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(const _CharT*) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
/usr/include/c++/4.2.1/bits/basic_string.h:519: note: std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(_CharT) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]

如果我不尝试分配

s = t;

确实有效。

我已经尝试了几个小时来理解错误消息,但最让我困惑的是它确实适用于 char*。

我很感激任何提示。谢谢!马库斯

最佳答案

错误试图解释的是您的作业“s = t”,其中 sstd::string , 如果 t 则有效是 std::string也是,或者如果 t是 [ const ] char* .您的转换运算符可以转换 t进入任何一个,所以编译器没有根据来选择一个而不是另一个......

您可以通过选择所需的转换来明确消除歧义:

s = t.operator std::string();
s = static_cast<std::string>(t);

或者您可以只提供一种转换,并在必要时让用户进行进一步的转换。

你可能会发现 - 最后 - 任何转换运算符都比它的值(value)更麻烦......它告诉std::string本身不提供到 const char* 的转换运算符.

关于C++ 将自定义类型的转换运算符重载为 std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3518145/

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