gpt4 book ai didi

c++ - 我可以明确定义流运算符和转换运算符吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:18:43 26 4
gpt4 key购买 nike

我正在尝试创建一个同时重载 operator<< 的类和 operator>>友元函数,一个operator std::string方法,像这样:

class MyClass
{
public:
operator std::string()

friend std::istream& operator>>(std::istream&, const MyClass&);
friend std::ostream& operator<<(std::ostream&, const MyClass&);
};

我发现,当我尝试使用流运算符时,我的编译器会提示流运算符的“模棱两可的过载”。我认为是因为如果我这样写:

myStream << MyClass();

编译器不知道是否使用 operator<<对于 MyClass ,或使用 operator std::string对于 MyClass首先,然后使用 operator<<对于 std::string (在标准库中定义)写入流。

真的是这个原因吗?如果是这样,有没有办法解决它?我知道在 C++11 中你可以使用 explicit转换运算符上的关键字以防止隐式转换,但我正在处理的项目当前编译为 C++03。

最佳答案

首先,自 1998 年标准以来,关键字 explicit 就已经存在。你确定你的编译器不支持它吗?

此外,我对您的解释持怀疑态度,因为表达式 std::cout << MyClass() 与您的运算符 << 和 >> 重载完美匹配,假设您的“myStream”是相应的流类型。完美匹配优先于任何需要用户定义转换的匹配。事实上,下面的代码对我来说编译得很好。您使用的是哪个编译器?

class MyClass {
public:
operator std::string();

friend std::istream& operator>>(std::istream&, const MyClass&);
friend std::ostream& operator<<(std::ostream&, const MyClass&);
};

void just_do_it()
{
std::cout << MyClass();
}

关于c++ - 我可以明确定义流运算符和转换运算符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29712138/

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