【发布时间】:2017-04-14 12:28:39
【问题描述】:
我正在阅读 Stroustrup 的《原则与实践》第 18 章,但我被困在与复制构造函数相关的一个部分。
我有一个复制构造函数定义为:
X(const X& x) {
out("X(X&)");
val = x.val;
}
X 是一个结构体。 val 只是 X 的一个 int 值。 “出”是:
void out(const string& s) {
cerr << this << "->" << s << ": " << val << "\n";
}
我还定义了以下 2 个函数:
X copy(X a) {
return a;
}
和
X copy2(X a) {
X aa = a;
return aa;
}
我主要有:
X loc(4);
X loc2 = loc;
loc2 = copy(loc);
loc2 = copy2(loc);
当我只调用 copy 时,复制构造函数被调用了两次:一次用于复制的参数范围,一次用于返回调用。这对我来说很有意义。
但是,当我调用 copy2 时,复制构造函数仍然只调用了两次:一次用于函数参数,一次用于“X aa = a”。为什么不也叫return呢?
【问题讨论】:
标签: c++ scope copy stack return