掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.29246

コピーコンストラクタの謎(C++です)
投稿者---Mr.Boo(2006/12/15 16:57:07)


すみません、C言語ではなくC++言語です。
開発環境その1
Windows2000、Borland C++ Compiler 5.1.1(BCC)、BCC Developer 1.2.21
開発環境その2
FedoraCore Ver6、gcc4.1.1

ハーバート・シルトさんの独習C++を勉強していて、コピーコンストラクタのところに載っていた以下のC++ソースファイルをコンパイルしたところ、gccとBCCで異なる結果が出てしまいました。
BCCでは本の通りコピーコンストラクタの呼び出しが行われたのですが、gccでは行われませんでした。
どなたか、考えられる理由をご存じないでしょうか。
ちなみにgccでは特にコンパイルスイッチは付けずに-oのみを指定していました。

何卒お願いいたします。

#include <iostream>
using namespace std;

class myclass{
public:
    myclass();
    myclass(const myclass &o);
    myclass f();
};

// 通常のコンストラクタ
myclass::myclass()
{
    cout << "通常のコンストラクタ" << endl;
}

// コピーコンストラクタ
myclass::myclass(const myclass &o)
{
    cout << "コピーコンストラクタ" << endl;
}

myclass myclass::f()
{
    myclass temp;

    return temp;
}

int main()
{
    myclass obj;
    obj = obj.f();
    return 0;
}






この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:コピーコンストラクタの謎(C++です) 29251 yoh2 2006/12/15 21:18:06


No.29251

Re:コピーコンストラクタの謎(C++です)
投稿者---yoh2(2006/12/15 21:18:06)


最適化により、コピーコンストラクタの呼び出しを省略してしまうことはC++の規格で許可されています。
以下のページが参考になると思います(特に後半部分)。

http://www.fides.dti.ne.jp/~oka-t/cpplab-retval-ctor.html


この投稿にコメントする

削除パスワード

No.29260

Re:コピーコンストラクタの謎(C++です)
投稿者---Mr.Boo(2006/12/18 09:16:37)


>最適化により、コピーコンストラクタの呼び出しを省略してしまうことはC++の規格で許可されています。
>以下のページが参考になると思います(特に後半部分)。
>
>http://www.fides.dti.ne.jp/~oka-t/cpplab-retval-ctor.html
yoh2さん、有難うございます。
お教えいただいたページを確認いたしました。
コンパイラによって依存してしまうことがあるのですね。
まったく知りませんでした。

有難うございました。 謎が解けました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧