C++でconstリファレンスを返すのは混乱します。ですから、コードブロックの下に、gnu C++とVisual Studioでテストします。そして、別の答えを見つける。 C++でリターンconst参照を使用する利点を誰にも教えてください。その理由はdifferntコンパイラで異なる動作を引き起こします。C++のリターンconstリファレンスについて
#include <iostream>
using namespace std;
class A
{
public:
A(int num1, int num2):m_num1(num1), m_num2(num2)
{
cout<<"A::A"<<endl;
}
const A& operator * (const A & rhs) const
{
return A(this->m_num1 * rhs.m_num1, this->m_num2*rhs.m_num1);
}
A(const A& rhs)
{
this->m_num1 = rhs.m_num1;
this->m_num2 = rhs.m_num2;
cout<<"A::A(A&)"<<endl;
}
const A& operator = (const A& rhs)
{
cout<<"A::Operator="<<endl;
return *this;
}
void Display();
private:
int m_num1;
int m_num2;
};
void A::Display()
{
cout<<"num1:"<<m_num1<<" num2:"<<m_num2<<endl;
}
int main()
{
A a1(2,3), a2(3,4);
A a3 = a1 * a2;
a3.Display();
return 0;
}
Gnu C++では、正解を報告しました。しかし、Visual Studioコンパイラでは失敗しました。
VS C++で観察された正確な問題は何でしたか?プログラムの成果は? –
'const A&operator *(const A&rhs)const'を' A operator *(const A&rhs)const'に変更するべきだと思います。 – hochl