#include<iostream>
stringクラスを定義し、stringオブジェクトをmain関数にてそれぞれs,w,eを作成。
sとwにはそれぞれpとqに値を入れ、それらを演算子のオーバロードで足し合わせて、eのオブジェクトに格納しようとしてます。
ここで疑問なのですが、なぜこのようなコードにすると結果が(500,0)と返ってくるのでしょうか?
return文の際にreturn string(p + stm.p, q + stm.q)と書くとなぜしっかりpとqの足した値が返ってくるのでしょうか?
return文の際、stringの型で返さなければsの(p,q)だけ計算される仕組みがよくわかりません。
※sの(p,q)とはsのオブジェクトの値であるs(200, 300)を指します。
本来ならreturn string(p + stm.p, q + stm.q)すると
sの200の値とwの100の値が足し合わさってeのpには300が格納され
eのqにはsのqとwのqが足し合わさってeのqには500が格納されるコードです。
ただreturn文で
return string(p + stm.p, q + stm.q)
上記のような記述をするとしっかり計算してくれるのですが
return (p + stm.p, q + stm.q)
上記のような書き方をすると値が(500,0)と表示されてしまいます。
このように帰ってくるのはなぜなのか
このあたりの挙動がよくわかりません。
struct string
{
int p;
int q;
string(int x = 0, int y = 0) { this->p = x; this->q = y; } string operator+(string& stm) { return (p + stm.p, q + stm.q); }
};
int main() {
string s(200, 300);
string w(100, 200);
string e;
e = s + w; std::cout << e.p << std::endl << e.q; return 0;
}
回答3件
あなたの回答
tips
プレビュー