在C++ 11月14日,我们有:返回值优化,移动语义,一些类,如unique_ptr不具备拷贝构造函数C++ 11。对于移动参考左值语义return语句
Q1:什么是一个正确的行为下面的代码片段时DECLARE_COPY_CTOR等于1还是零?
Q2:在调试生成与MSVC 2013建为代码段下面Win32控制台应用程序给出了在控制台:A(),A(A & &),〜A(),〜A()。所以看起来像左值引用“a”被用来绑定到“A & &”。它合法吗?我认为只有临时的物体才能成为移动的候选人。
Q3:在发布版本的编译器选择使用静脉阻塞(所以输出为:A()〜A())
是编译器自由选择是 “A”,在功能范围是举一个canditate?
#include <stdio.h>
#include <iostream>
#include <memory>
#define DECLARE_COPY_CTOR 0
class A
{
public:
A() {puts("A()");}
~A() { puts("~A()"); }
#if DECLARE_COPY_CTOR
A(A&) { puts("A(A&)"); }
#endif
A(A&&) { puts("A(A&&)"); }
A& operator = (A&) { puts("A& operator = (A&)"); return *this; }
};
A F()
{
A a; // here a is lvalue
return a; // here a is still lvalue
}
int main()
{
auto i = F();
return 0;
}