选择要调用的构造函数

now*_*owi -1 c++ c++17

考虑以下代码

class MyClass
{
public:
    MyClass( MyClass && );
    template< typename ... T > MyClass( T&& ... );
};
Run Code Online (Sandbox Code Playgroud)

我如何区分这两个构造函数之间的调用?我可以专门设计模板来调用原始模板吗?

这是示例用例(这正是我在实际代码中所做的):

MyClass c( MyClass { } );
Run Code Online (Sandbox Code Playgroud)

Nat*_*ica 5

从 C++17 开始

MyClass c( MyClass { } );
Run Code Online (Sandbox Code Playgroud)

总是会打电话

template< typename ... T > MyClass( T&& ... );
Run Code Online (Sandbox Code Playgroud)

这样做的原因是不再有临时对象。相反,初始化被省略,c直接从“临时”的初始化器构造。这意味着你现在真正拥有的是

MyClass c{};
Run Code Online (Sandbox Code Playgroud)

不过,这是一件好事,因为我们现在只是构建这是性能上的胜利,而不是构造和移动。

  • 为了最清楚起见,我要补充一点,在上述情况下,参数包是*空*。 (3认同)