3

我正在尝试使用以下函数为字符串和双精度定义运算符 +

string operator + (const double& b,const string a){
    return to_string(b)+a;
}

当我进行以下操作时,它运行良好

double c = 100.256;
string d = "if only";
cout<<c+d<<"\n";

但是当我传递 const char 而不是 string 时,它会引发编译错误('double' 和 'const char [4]' 类型的无效操作数到二进制 'operator+')

double c = 100.256;
string test = c+"sff";

为什么 const char[] "sff" 到字符串的隐式转换没有发生?

4

1 回答 1

10

根据 C++ 17 标准(16.3.1.2 表达式中的运算符)

1 如果表达式中没有运算符的操作数具有类或枚举类型,则假定该运算符是内置运算符并根据第 8 条进行解释。

在这个表达式中

c+"sff"

(其中c是 type 的标量值double)操作数都没有类或枚举类型和内置运算符 + 用于类型double并且const char *未定义。当第二个操作数具有整数类型时定义指针算术。

于 2020-08-11T13:44:36.873 回答