构造具有私有成员的对象
constexpr to construct objects with private members
我有以下代码编译和行为如预期:
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
类型的对象?
如果:
- 有一个简单的析构函数
- 它是一个聚合,或者它至少有一个非复制,不可移动的constexpr构造器
- 它的所有基类和非静态成员都是非易失性文字类型
因此,当向一个类添加一个构造函数时,如果你想要它是一个文字类型,你必须将这个构造函数标记为constexpr
。
相关文章:
- 指向设备对象成员的指针
- 访问由unique_ptr传递的对象成员
- 引用对象成员函数的成员函数
- 将 C# 对象(包含静态对象成员)作为参数传递给 C++/CLI 程序
- Lua C API - 从C++分配和使用类的对象成员
- Rapidjson 遍历并获取复杂 JSON 对象成员的值
- 类对象成员变量在调用函数时不会更改
- 对象成员变量还是继承
- C++多态性:有没有办法找到对象成员函数的地址?
- 重载对象成员的比较运算符
- 获取未初始化对象成员的地址是否定义良好?
- 在优先级队列被推送到队列后,如何编辑对象成员
- 为什么在这里调用析构函数,以及在调用该对象析构函数后如何调用对象成员函数?
- 通过 std::bind 从对象成员检索值
- 保留对象成员变量的本地副本
- 有没有办法为静态对象成员定义一个符合开关标准的常量?
- 没有默认构造函数的对象成员的 wig setter
- 对象成员数组C++默认初始化
- 如何在数组中添加对象成员
- 使用聚合创建和关联两个不同的对象成员