这个成语是什么,什么时候应该使用?它解决了哪些问题?当使用C++ 11时,成语是否会改变?
虽然在许多地方已经提到过,但我们没有任何单一的"它是什么"问题和答案,所以在这里.以下是前面提到的地方的部分列表:
c++ c++-faq copy-constructor assignment-operator copy-and-swap
我知道C++编译器为类创建了一个复制构造函数.在这种情况下,我们必须编写用户定义的复制构造函数吗?你能举一些例子吗?
如果我覆盖operator=,复制构造函数会自动使用new运算符吗?同样,如果我定义了一个拷贝构造函数,会operator=自动"继承"拷贝构造函数的行为吗?
c++ constructor operators copy-constructor assignment-operator
在这个代码片段中,实际调用了哪个构造函数?
Vector v = getVector();
Run Code Online (Sandbox Code Playgroud)
Vector有复制构造函数,默认构造函数和赋值运算符:
class Vector {
public:
...
Vector();
Vector(const Vector& other);
Vector& operator=(const Vector& other);
};
Run Code Online (Sandbox Code Playgroud)
getVector按值返回.
Vector getVector();
Run Code Online (Sandbox Code Playgroud)
代码使用C++ 03标准.
代码片段看起来应该调用默认构造函数然后调用赋值运算符,但我怀疑这个声明是使用复制构造函数的另一种形式.哪个是对的?
这是一个来自interiew的问题,以及下面的代码.这个功能有什么问题?
string f() {
return "hello world";
}
Run Code Online (Sandbox Code Playgroud)
对我来说,没有任何错误,我甚至可以使用此功能运行程序:
#include <iostream>
#include <string>
using namespace std;
string f() {
return "hello world";
}
int main() {
string s2=f();
cout<<s2<<endl;
}
Run Code Online (Sandbox Code Playgroud)
什么是错这个功能呢?
foo和bar之间有区别吗:
class A
{
Object __o;
void foo(Object& o)
{
__o = o;
}
void bar(Object o)
{
__o = o;
}
}
Run Code Online (Sandbox Code Playgroud)
据我了解,foo在调用对象o时不执行复制操作,并且对赋值执行一次复制操作.Bar在调用对象o时执行一次复制操作,而另一个用于赋值.所以我或多或少会说foo使用的内存比bar少2倍(如果o足够大).那是对的吗 ?
是否有可能编译器优化bar函数以仅对o执行一次复制操作?即使__o指向参数o的本地副本而不是创建新副本?
c++ ×7
c++-faq ×2
c++03 ×1
constructor ×1
copy-elision ×1
function ×1
operators ×1
optimization ×1
reference ×1