【发布时间】:2021-01-30 10:53:33
【问题描述】:
考虑以下 C++17 结构:
struct S {
M1 m1; M2 m2; M3 m3;
bool operator<(const S& that) const { return tie() < that.tie(); }
auto tie() const { return std::tie(m1,m2,m3); }
};
这是正确的吗? S::tie 会返回一个对成员的引用元组,还是会复制一份?会自动推断出正确的类型(引用元组)吗? constness 做对了吗?
(我看到的示例对 std::tie 进行了两次调用,并且没有像这样将其分解为单独的成员函数。想知道/怀疑是否有原因。)
【问题讨论】:
-
std::tie返回 "...一个包含左值引用的 std::tuple 对象..." en.cppreference.com/w/cpp/utility/tuple/tie -
@RichardCritten:是的,但是如果您进一步向下看该页面,他们会在
operator<的示例中调用它两次。它会像我在成员函数中所做的那样工作吗?我想我只是对他们在示例中没有这样做的事实感到奇怪。 -
成员函数更好 - 参见 DRY 规则。所以你的版本更好,更不容易出错