C++ 如何强制C++;要使用运算符“<;”由编译器库定义?
我试图比较字符串,其中字符串仅由数值组成C++ 如何强制C++;要使用运算符“<;”由编译器库定义?,c++,string,comparison,string-comparison,C++,String,Comparison,String Comparison,我试图比较字符串,其中字符串仅由数值组成 我定义了自己的操作符,尽管我不建议重载操作符,其他人已经直接回答了这个问题。我建议你不要做这件事。如评论中所述:最好不要编写运算符不要编写运算符我不确定此运算符是否会执行您想要的操作,即使您解决了重载问题(例如,将“0001”与“10”进行比较)。如果您处理的是受约束的字符串(所有字符都是数字),则更好,那么它就不是一个简单的std::string。编写一个包装字符串的类,并检查c'tor中的约束。然后运算符此运算符在C++20中不起作用,因为此运算符已
我定义了自己的
操作符,尽管我不建议重载操作符,其他人已经直接回答了这个问题。我建议你不要做这件事。如评论中所述:最好不要编写运算符不要编写运算符我不确定此运算符是否会执行您想要的操作,即使您解决了重载问题(例如,将“0001”与“10”进行比较)。如果您处理的是受约束的字符串(所有字符都是数字),则更好,那么它就不是一个简单的std::string
。编写一个包装字符串的类,并检查c'tor中的约束。然后运算符此运算符在C++20中不起作用,因为此运算符已被删除(有利于spaceship运算符)std::operator没有无限循环,因为我们的自定义比较运算符对std::less
不可见。丑陋,但有效。
bool operator<(const string &s1, const string &s2)
{
if(s1.size() != s2.size()) return s1.size() < s2.size();
return s1 < s2; // I don't want this to use mine
}
bool operator<(const std::string& s1, const std::string& s2)
{
if (s1.size() != s2.size()) {
return s1.size() < s2.size();
}
return std::operator<(s1, s2);
}
std::string a,b;
bool b = a < b;
struct my_string {
const std::string& data;
bool operator<(const my_string& other) {
return ...;
}
};
std::string a,b;
bool b = my_string{a} < my_string{b};