不调用复制构造函数

nit*_*ian 5 c++ constructor copy-constructor

可能重复:
为什么在这种情况下不调用复制构造函数?

考虑下面的示例程序:

#include <iostream>

using namespace std;

class sample
{
    private:
        int x;

    public:
        sample(int a=0) : x(a)
        {
            cout << "default ctor invoked\n";
        }

        sample(const sample& obj)
        {
            cout << "copy ctor invoked\n";
        }

};

int main()
{
    sample s2 = sample(20); //Line1
    sample s3 = 20; //Line2

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Line1,首先使用参数20 sample调用类的构造函数.explicitly然后我希望调用复制构造函数来初始化s2.

在Line2中,首先使用参数20 sample调用类的构造函数.implicitly这里我还希望调用复制构造函数来初始化s2.

在这两种情况下,都不会调用复制构造函数?为什么会这样?我相信,我对复制构造函数的调用有一些问题.有人能纠正我哪里出错了吗?

jus*_*tin 8

这是预料之中的.它被称为复制省略.

您的期望是正确的,但是他们在C++(性能)中做了一个例外,它允许编译器在绕过复制构造函数时将表达式视为一个实例的直接初始化.


归档时间:

查看次数:

430 次

最近记录:

13 年,11 月 前