聚合初始化 需要保证没有用户提供的构造函数,但是 std::tuple
和 std::pair
类有一大堆重载构造函数。从核心语言的角度来看,这些构造函数算不算用户提供的甚至用户声明的?
使用 C++17,将可以编写以下代码(更新/澄清:其中 nocopy 是一个不能复制或移动的类,例如 std::mutex
)
auto get_ensured_rvo_str(){
return std::pair(std::string(),nocopy());
}
编辑:不行,如链接的答案和下面的答案所述。
这需要聚合初始化(为了上下文: C++17中具有不可移动类型和保证RVO的多个返回值(结构化绑定))。
tuple
和pair
是否由特殊的标准语言支持以允许此操作(在存在构造函数的情况下)?:
20.5.2.1 Construction
... EXPLICIT constexpr tuple(const Types&...);
6 Effects: 构造函数使用相应参数的值初始化每个元素。
或者我们可以原则上编写自己的tuple
或pair
吗?
nocopy
也是无法移动的(如链接问题中所述)。 - Johan Lundberg