use*_*031 2 c++ operator-keyword
我有一个结构:
struct t {
string data;
t(string new_data) { data = new_data; }
string operator +(const char *operand) { return data + string(operand); }
}
Run Code Online (Sandbox Code Playgroud)
我写的时候
t y="text";
string x = "\r\n" + t;
Run Code Online (Sandbox Code Playgroud)
它(ms visual 2015)说"没有操作符"+"匹配这些操作数",鼠标在编辑器中的"+"源提示"操作数类型是const char [3] + text",这表明我的重载操作符应该工作,不是吗?我该怎么做才能将类型t字符串添加到const chars中呢?
仅当类位于运算符的左侧时,才会调用成员函数二元运算符重载.如果您需要在左侧处理操作员右侧的内置(无法识别如何使用您的类)的情况,则需要非成员重载,例如(在课外定义):
// No need to explicitly stringify operand, since string already overloads
// + for const char*
string operator+(const char *left, const t& right) { return left + right.data; }
Run Code Online (Sandbox Code Playgroud)
哪个会string x = "\r\n" + t;设置x为"\r\ntest"s.
我强烈建议您现在阅读运营商重载常见问题解答,然后再将自己写入角落; 你学到的第一件事就是不要operator+作为一个成员函数来实现(只是+=一个成员).