【发布时间】:2012-11-15 22:12:37
【问题描述】:
我在我的代码中发现了一个错误,我在对结构容器进行排序时忘记使用自定义比较器。这让我想知道它使用什么作为小于运算符,因为我没有为结构定义任何内容。
当没有定义这些运算符时,对象如何比较 和 ==?是通过内存地址吗?是否在标准中定义?我在 Google 上找不到任何此类信息。
编辑:
这是我使用的类:
using namespace std;
typedef unsigned id;
class LogEntry {
id master_id;
string timestamp;
string category;
string message;
string str_rep;
public:
LogEntry(id id, string t, string c, string m) :
master_id(id), timestamp(t), category(c), message(m) {
}
string get_timestamp() const {
return timestamp;
}
string get_category() const {
return category;
}
string get_message() const {
return message;
}
string to_string() {
ostringstream ss;
ss << master_id << "|" << timestamp << "|" << category << "|"
<< message;
return ss.str();
}
id get_id() const {
return master_id;
}
};
编辑2:
我意识到我犯了一个愚蠢的错误。我正在存储一个指向对象的指针向量。因此,指针很可能通过地址进行比较。如果我没有存储指针,我认为它不会编译。
编辑3: KerrekSB 在他的答案的 cmets 中发布了一个相关的有趣链接:How can pointers be totally ordered?
【问题讨论】:
-
听起来很奇怪。我本来希望您的代码无法编译。也许向我们展示一个重现此的 testcase。
-
@LightnessRacesinOrbit 哦,我没有提供测试用例,因为我认为有一些默认值......如果不是这样,我会尽快发布一些代码。
标签: c++ comparison comparison-operators