我正在探索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