请考虑以下代码:
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'实体 一个非常数表达式
我在这里做错了什么?
答案 0 :(得分:1)
constexpr
没有constexpr
构造函数,因此,它不能用于初始化CString
对象。
答案 1 :(得分:1)
错误很明显;由于constexpr
之类的类没有constexpr
构造函数,因此无法将它们实例化为{{1}}变量。