ページ 11

complex::real() が返すのは参照?値?

Posted: 2013年7月10日(水) 00:07
by 0x11

コード:

#include <iostream>
#include <algorithm>
#include <complex>

using namespace std;

int main(){
  complex<double> b = 9;
  b += 3;
  b.real() += 4;
  b.real() = 9;

  cout << b << endl;
  return 0;
}
上のコードをg++ -std=c++0xとVS2012でコンパイルするとreal() += 4; b.real() = 9; の部分で
test.cpp:10:15: error: lvalue required as left operand of assignment
というエラーが出るのですが、g++ -std=c++03だと成功します
C++0xでは real() の戻り値が参照から値のコピーに変更されてしまったということなのでしょうか?
不便に感じるのですが、なぜそのような仕様になったのか教えて欲しいです.

Re: complex::real() が返すのは参照?値?

Posted: 2013年7月10日(水) 02:00
by h2so5
c++03でreal()が参照を返すのは非標準の拡張らしいです。
つまり本来はコピーを返すのが正しいということになります。

http://www.open-std.org/jtc1/sc22/wg21/ ... n1589.html
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51013

解決方法はこのあたりでしょうか。
std::complex の実部/虚部への参照を取得する

Re: complex::real() が返すのは参照?値?

Posted: 2013年7月10日(水) 11:47
by 0x11
勉強になりました
ありがとうございました