通过constexpr获取默认值

时间:2018-01-30 11:09:35

标签: c++

请考虑以下代码:

template<typename T>
constexpr T getDefault()
{
    if constexpr (std::is_same_v<T, CString>)
    {
        return "";
    }
}

template<typename T>
struct getdef
{
    static constexpr T value = getDefault<T>();
};

现在我想获得CString的默认值... CString是来自MFC的类。

CString s2 = getDefault<CString>();
CString s = getdef<CString>::value;

使用getDefault的第一行正确编译,但第二行发出错误。

  

错误C2127'value':非法初始化'constexpr'实体   一个非常数表达式

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

constexpr没有constexpr构造函数,因此,它不能用于初始化CString对象。

答案 1 :(得分:1)

错误很明显;由于constexpr之类的类没有constexpr构造函数,因此无法将它们实例化为{{1}}变量。