这个成语是什么,什么时候应该使用?它解决了哪些问题?当使用C++ 11时,成语是否会改变?
虽然在许多地方已经提到过,但我们没有任何单一的"它是什么"问题和答案,所以在这里.以下是前面提到的地方的部分列表:
c++ c++-faq copy-constructor assignment-operator copy-and-swap
GCC概述了一个声明 - 无论我多么努力地阻止它.我试过了
-fno-inline-O0__attribute__ ((noinline))dummy asm("")没有成功!这里的代码:
#include<iostream>
using namespace std;
struct A {
A() {cout << "A::A()" <<endl; }
A(const A& a) {cout << "A::A(copy)" <<endl; }
A& operator=(const A& a) {cout << "A::=()" <<endl; return *this;}
};
A __attribute__ ((noinline)) func()
{
cout << "func()" << endl;
A loc;
asm("");
return loc;
}
int main() {
A a = func();
}
Run Code Online (Sandbox Code Playgroud)
不幸的输出(g ++(Ubuntu/Linaro 4.5.2-8ubuntu4)4.5.2)是
func()
A::A()
Run Code Online (Sandbox Code Playgroud)
声明A a = func(); ??
这个实验的原因是我想知道执行到这个语句时会发生什么(因为我需要控制如何完成):
A a = …Run Code Online (Sandbox Code Playgroud)