1、以下语句是否能编译?std::vector > ints { std::make_unique (1), std::make_unique (2) }; 1. 不能编译,因为我们有一个不可复制类型(unique_ptr)的初始化列表,而初始化列表需要复制操作。2. 能编译,因为初始化列表可以处理不可复制类型。3. 能编译,因为编译器可以省略那些额外的复制操作。
- 不能编译,因为我们有一个不可复制类型(
unique_ptr
)的初始化列表,而初始化列表需要复制操作。
2、下面是包含两个数据成员的Point类声明。struct Point { double x; double y; }; 更新这个类,使其使用非静态数据成员初始化(NSDMI),并将Point::x初始化为1.0,将Point::y初始化为2.0。
struct Point { double x = 1.0; double y = 2.0; };
3、下面有一个名为SalesRecord的结构体:#include constexpr unsigned int DEFAULT_CATEGORY = 4; constexpr unsigned int DEFAULT_FLAGS = 0x0a; struct SalesRecord { std::string name_; double price_; unsigned int category_ : 4; unsigned flags_ : 4; }; 使用非静态数据成员初始化(NSDMI)将数据成员初始化为以下值:• name_ 应为 “empty” • price_ 应为 1.0 • category_ 应为 DEFAULT_CATEGORY • flags_ 应为 DEFAULT_FLAGS
constexpr unsigned int DEFAULT_CATEGORY = 4;
constexpr unsigned int DEFAULT_FLAGS = 0x0a;
struct SalesRecord {