在下面的代碼,在該行行爲接受const引用
A(A& b)
當使用該編譯器給誤差作爲
c110.cpp:41:錯誤:調用沒有匹配的功能'A :: A(A)'
c110.cpp:8:注意:考生分別是:A :: A(A &)
但只要我把它轉換成
A(const A& b)
許多許多thanx提前
沒有錯誤出現。爲什麼這樣?
Code
class A
{
public:
static int cnt;
A(A& b)
{
cnt++;
cout<<"cnt="<<cnt<<endl;
}
A()
{
cnt++;
cout<<"cnt="<<cnt<<endl;
}
~A()
{
cnt--;
cout<<"cnt="<<cnt<<endl;
}
};
int A :: cnt=0;
A fun(A b)
{
return b;
}
int main()
{
A a;
A b=fun(a);
return 0;
}
但是在C++函數中,當返回值時不是創建臨時函數,而是傳遞了b的地址,它是用函數 – Luv
中的b變量複製構建的。我認爲它是RVO(返回值優化),是不是需要放置在這裏? – Luv
@Luv它可以也可能會。但沒關係。僅僅因爲它不使用某些東西並不意味着它不必被正確定義。 –