gpt4 book ai didi

没有运算符定义的 C++ 失败

转载 作者:可可西里 更新时间:2023-11-01 18:09:31 25 4
gpt4 key购买 nike

我目前正在将一个 C++ 应用程序移植到一个稍微受限的环境中。该应用程序使用 STL、字符串和流类。我正在重写这些将在我的环境中很好地运行的简化版本。

我担心的是,即使没有所有必要的运算符定义,我的应用程序也能编译。例如,对于我定义的字符串类:

string operator+ (const string& lhs, const string& rhs);

这就足够了。但是,我注意到经常有 mystring + "some constant string"的情况,这在我的代码中没有任何地方定义。当我明确添加它时,它被使用:

string operator+ (const string& lhs, const char* rhs);

在那之前发生了什么?在我添加第二个函数之前它编译成功。编译器肯定无法推断如何将 C 风格的字符串连接到我的字符串类。

现在我的程序出现了奇怪的行为,我想知道这是否是由于其他运算符未定义所致。如果程序需要,是否有任何方法可以强制编译器要求此类运算符定义?

附言我的字符串类在一个唯一的命名空间中,与 std::

无关

最佳答案

如果没有看到您的其余代码,就不可能确定,但​​在这种情况下,可能也不难猜测。你几乎可以肯定你的 string 有一个构造函数,它接受一个 char const * 作为它的参数,所以发生的事情是编译器正在使用那个 ctor 来转换 char const *string,然后使用 string operator+ (const string& lhs, const string& rhs); 连接它。

允许这种情况发生是(如果不是)用全局变量而不是成员函数重载这些运算符的主要原因之一。作为成员函数,它们可以转换 操作数,但不能转换左操作数。

关于没有运算符定义的 C++ 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7840972/

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