我正在探索constexpr
的世界,并决定创建一个只应用于constexpr上下文和其他编译时构造的类。仅当在constexpr /编译时环境中操作时,引用是否有用?
通常情况下,我非常谨慎地提供所有必要的重载类可根据需要,例如:
template <typename T>
struct Thing
{
Thing(T value) : m_value(value) {}
T &value() & { return m_value; }
const T &value() const & { return m_value; }
T &&value() && { return std::move(m_value); }
private:
T m_value;
};
为Thing::value
的一套重载应该照顾的高效访问存储的价值,没有不必要的副本制成。如果Thing
实例是临时的,则存储的值甚至可以移出。
但是如果Thing
只能用作constexpr类型,那么Thing::value
所需的所有这些不同的重载是甚至是有用的呢?或将以下相当于:
template <typename T>
struct Thing
{
constexpr Thing(T value) : m_value(value) {}
constexpr T value() const;
private:
T m_value;
};
我的问题基本上可以归结为:是引用帮助的(更有效)的constexpr运行时/编译时上下文只;还是以等值的价值传递一切东西?
在编译时参考文献是否合理?一个引用是一个对象在内存中的句柄,但由于它只在编译时进行评估,所以我认为它没有区别 –
[参考文献在编译时实际上是有意义的](http://coliru.stacked-crooked的.com /一个/ c1676d70db7cd413)。至少和作为一个例子,标准允许你使用它们作为模板参数,但有一些限制。 – skypjack