我有以下编译和行为符合预期的代码:
struct A
{
//private:
int v;
friend constexpr A f(int v);
};
constexpr A f(int v)
{
return A{v};
}
constexpr A operator""_A(unsigned long long v)
{
return f(static_cast<int>(v));
}
我可以像这样构建A
类型的对象:
auto a = 1_A;
如果我将值A::v
设为私有,则会出现编译错误
没有用于初始化'A'
的匹配构造函数
如果我将构造函数添加到A
,我会收到不同的编译错误:
Constexpr函数的返回类型“A”不是文字类型
有没有办法让A::v
私有且仍有constexpr
函数来构造A
类型的对象?
答案 0 :(得分:2)
在以下情况下,类是文字类型:
因此,在将构造函数添加到要作为文字类型的类时,必须将该构造函数标记为constexpr
。