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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
0x11

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

#1

投稿記事 by 0x11 » 12年前

コード:

#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() の戻り値が参照から値のコピーに変更されてしまったということなのでしょうか?
不便に感じるのですが、なぜそのような仕様になったのか教えて欲しいです.

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

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

#2

投稿記事 by h2so5 » 12年前

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 の実部/虚部への参照を取得する

0x11

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

#3

投稿記事 by 0x11 » 12年前

勉強になりました
ありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る