在 cpp 中为双精度和字符串数据类型定义运算符 +
defining operator + for double and string data types in cpp
我正在尝试使用以下函数为字符串和双精度定义运算符 +
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" 隐式转换为字符串?
根据 C++ 17 标准(16.3.1.2 表达式中的运算符)
1 If no operand of an operator in an expression has a type that is a
class or an enumeration, the operator is assumed to be a built-in
operator and interpreted according to Clause 8.
在这个表达式中
c+"sff"
(其中 c
是类型 double
的标量值)操作数都没有 class 或枚举类型和 built-in 运算符 + 类型 double
和 const char *
未定义。当第二个操作数具有整数类型时定义指针算法。
我正在尝试使用以下函数为字符串和双精度定义运算符 +
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" 隐式转换为字符串?
根据 C++ 17 标准(16.3.1.2 表达式中的运算符)
1 If no operand of an operator in an expression has a type that is a class or an enumeration, the operator is assumed to be a built-in operator and interpreted according to Clause 8.
在这个表达式中
c+"sff"
(其中 c
是类型 double
的标量值)操作数都没有 class 或枚举类型和 built-in 运算符 + 类型 double
和 const char *
未定义。当第二个操作数具有整数类型时定义指针算法。