gpt4 book ai didi

c++ - 复制语句如何识别其构造函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:40 26 4
gpt4 key购买 nike

在下面的代码中,当语句 X loc2 = loc; 被执行时,编译器识别出下​​面的构造函数应该运行,然后运行它。
X(const X& x) { val = x.val; out("X(X&)");

我知道构造函数据说是一个复制构造函数,但我的问题是编译器如何知道构造函数属于该语句?是否有关于复制构造函数 的结构应该如何构造以便在执行复制语句时可以识别和运行的规则?

#include "std_lib_facilities_4.h"
using namespace std;

struct X {
int val;
void out(const string& s)
{cerr << this << " -> " << s << ": " << val << "\n\n"; }


X(int v) { val = v; out("X(int)"); }

X(const X& x) { val = x.val; out("X(X&)"); } // The copy constructor

};

int main()
{
X loc(4);
X loc2 = loc; // This statement

char ch;
cin>>ch;
return 0;
}

std_lib_facilities 是 here .我使用的操作系统是 Windows,我的编译器是 Visual Studio。

最佳答案

只要构造函数具有以下形式之一,它就会在编译时被自动采用为复制构造函数:

X(const X& );
X(X&);
X(volatile X& );
X(const volatile X& );
X(const X&, /*any number of arguments with default values*/);
X(X&, /*any number of arguments with default values*/);

除非您有充分的理由采用替代方案,否则请采用第一个。

关于c++ - 复制语句如何识别其构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31826242/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com