没有操作员定义的C++失败

hay*_*sti 7 c++ string g++ operator-overloading concatenation

我目前正在将C++应用程序移植到略受限制的环境中.该应用程序使用STL,字符串和流类.我正在重写这些在我的环境中可以很好地运行的简化版本.

我关心的是,即使没有所有必要的操作员定义,我的应用程序也在编译.例如,对于我定义的字符串类:

string operator+ (const string& lhs, const string& rhs);
Run Code Online (Sandbox Code Playgroud)

这就足够了.但是,我注意到通常情况下有mystring +"一些常量字符串",这在我的代码中没有定义.当我明确添加它时,它被使用:

string operator+ (const string& lhs, const char* rhs);
Run Code Online (Sandbox Code Playgroud)

那之前发生了什么?它在我添加第二个函数之前成功编译.当然,编译器无法推断如何将c样式字符串连接到我的字符串类.

我现在在我的程序中遇到了奇怪的行为,我想知道是否由于其他运算符未定义.如果程序需要,有没有办法强制编译器要求这样的运算符定义?

PS我的字符串类位于一个唯一的命名空间中,与std ::无关

Jer*_*fin 12

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

允许这种情况发生是一个(如果不是)主要原因与全局代替成员函数重载这些操作符.作为成员函数,它们可以转换操作数,但不能转换为操作数.