返回assert和逗号运算符

时间:2017-04-05 10:00:49

标签: c++ c++17

http://en.cppreference.com/w/cpp/algorithm/clamp将此作为std::clamp的可能实现:

template<class T, class Compare>
constexpr const T& clamp( const T& v, const T& lo, const T& hi, Compare comp )
{
    return assert( !comp(hi, lo) ),
        comp(v, lo) ? lo : comp(hi, v) ? hi : v;
}

虽然我确实理解了这是如何工作的,但是把断言声明放在回报中对我来说似乎很奇怪;我会把它写成:

template<class T, class Compare>
constexpr const T& clamp( const T& v, const T& lo, const T& hi, Compare comp )
{
    assert( !comp(hi, lo) );
    return comp(v, lo) ? lo : comp(hi, v) ? hi : v;
}

尽管如此,我还是猜测他们选择了他们的实施是有原因的;他们的版本优于&#34;我的&#34;?

1 个答案:

答案 0 :(得分:38)

在C ++ 11中,constexpr函数只能有一个return语句(参见here)。建议的实现允许该函数在符合C ++ 11的编译器中使用。

C ++ 14删除了此限制,因此您的实现在C ++ 14或更高版本中也有效。

忽略这一点,功能完全相同,而且你的功能肯定更具可读性。

相关问题