标记为 constexpr 的函数应该是不可变的纯函数。从“std::max() and std::min() not constexpr”帖子中,您不能将 const-reference 输入重新引导为输出,因为这需要参数具有永久性。const
但是,只要不重新引导参数,您可以通过-reference 获取参数吗?
// Is this still constexpr?
// (Assuming that std::complex is constexpr-safe, as it's supposed to be.)
constexpr
int MySum( std::complex<double> const &a, std::complex<double> const &b )
{ return static_cast<int>( a.real() + b.real() ); }
constexpr
相反,您可以返回对启用类型的子对象的 const 引用吗?
template <typename T>
class MyComplex
{
T c_[ 2 ];
public:
constexpr MyComplex( T r = T(), T i = T() )
: c_{ r, i }
{}
// Is this actually constexpr?
constexpr T const & operator[]( unsigned l ) //const
{ return c_[ l ]; }
// Can't be constexpr
T & operator[]( unsigned l ) { return c_[ l ]; }
};
或者甚至子对象的回报也必须是按价值计算的?
(对不起,如果这是基本的,但我发现的一切都围绕这一点跳舞,但实际上并没有确定性。)