constexpr

    5熱度

    1回答

    C++ 11標準是否指定numeric_limits<T>::min和max必須是可以在模板中使用的常量表達式或static_assert? 更一般地說,如何根據標準找到常量表達式的函數列表?

    4熱度

    1回答

    如果我使用專業化,下面的代碼可以是足夠的寫編譯時階乘功能,並且將正確提供120的fact1<5>()結果: template <size_t N> constexpr size_t fact1() { return N*fact1<N-1>(); } template <> constexpr size_t fact1<0>() { return 1; } 但是,使用單個函數體和三元運

    15熱度

    1回答

    通常情況下,constexpr必須沒有副作用。但是,我發現可以在引發異常的構造函數中使用副作用。該技術可用於模擬constexpr函數的assert(),如以下程序所示。 #include <iostream> #include <cstdlib> #include <stdexcept> struct constexpr_precond_violated : std::logic_err

    7熱度

    3回答

    考慮下面的代碼: template<typename T> constexpr inline T fma(T a, T b, T c) { return a * b + c; } 這編譯就好了。但爲什麼呢?理論上,constexpr函數只能調用其他constexpr函數。但是,不能保證運營商將具有協同功能。舉例來說,假設我有一些類型有以下接口: 運算符+和* 不 constex

    3熱度

    3回答

    我想弄清楚哪種是最可行的方式實現函數的可變類型列表。例如,計算所有類型的最大大小。我知道有幾種方法可以完成這樣的任務,但是我想知道什麼時候選擇哪種策略。 這是我會考慮的機制(有可能存在更多的,請註明如果是這樣): 型性狀(最好簡潔使用的聲明): template <typename Head> using max_size = typename std::integral_constant<si

    6熱度

    2回答

    我剛剛實現(再次)一個遞歸模板,用於在編譯時計算一個整數的階乘(誰曾想過有一天我真的需要它!)。儘管如此,我並沒有自己動手,而是去Boost尋找答案。然而,特殊數學中的階乘函數特別禁止使用整數類型,所以我只寫了自己的。 不過,我應該使用Boost中的另一個函數嗎?我應該投我的整數double並使用boost::factorial函數?計算是在編譯時執行的嗎?

    1熱度

    2回答

    我想知道如何初始化一個數組,其中的值可以在常量表達式中使用。 這裏是我的問題的解釋: // The goal : initializing an array for a class // whose values can be used as normal static const // (as template parameters for example) class MyClass

    2熱度

    1回答

    因此至約常量/非const與三元運算前一個問題,是以下test函數確定關於到C++ 11標準: template<bool UseConst> class MyClass { public: constexpr bool test() { return (UseConst) ? (_constvar) : (_var); }

    0熱度

    2回答

    什麼是C++ 11 ISO標準說一下這樣的表達: class MyClass { public: constexpr int test() { return _x; } protected: int _x; }; _x處於constexpr中使用的非const:將它產生錯誤,或將constexpr被簡單地忽

    5熱度

    2回答

    這是我想要做的簡化版本。 constexpr float f(float a, float b){ constexpr float temp = a+b; return temp*temp*temp; } 在我的版本中,a + b更加複雜,所以我不想剪切和粘貼三次。使用3 *(a + b)也不是實際功能的工作解決方案。我試圖保留與語法有關的問題,而不是代數。我可以通過將+