std::basic_string 是否正式具有隐式生成的移动构造函数?

Does std::basic_string formally have an implicitly generated move constructor?

我知道 std::basic_string 实际上支持移动语义,但我在 C++11 中找到的右值引用参数构造函数在 class 定义中看起来像这样:

C++11 §21.4/5
basic_string(basic_string&&, const Allocator&);

然后在详细讨论中再次显示分配器参数没有默认值:

C++11 §21.4.2/17
basic_string(basic_string&& str, const Allocator& alloc);

无视 class 应该是可移动的明显意图,class 是否正式具有隐式生成的移动构造函数?

不,这不是隐含的,而是明确的。同样在 C++11 21.4/5 中是

basic_string(basic_string&& str) noexcept;