2

今日、次のようなコードをコンパイルしようとしました。

class example
{
public:
    example(const char (&in_data)[6]);
};

example foo()
{
    return "ABCDE";
}

GCC では、戻り行に example への変換がないことを訴えていました。次のようなコードを使用して、他の場所でタイプ example のオブジェクトを初期化できました

example bar("ABCDE");

大丈夫です。VS2010でコンパイルした場合も、これはすべて正常に機能しました。

さて、私の質問は、これはうまくいったはずですか、それともこれはビジュアルスタジオのコンパイラ拡張機能ですか? 明示的でないコンストラクターのために、これは機能するはずだと私には思えます...

仕事をしていないので正確なエラー メッセージはわかりませんが、本当に困っています。

4

2 に答える 2

1

暗黙の変換が機能しない理由がわかりません。gcc、clang、および EDG で試してみると、gcc のみが失敗します。これはgccエラーだと思います。とはいえ、gcc はchar const*配列参照からの作成に熱心なようです。このコード

example f()
{
    char const (&array)[6] = "abcde";
    return array;
}

このエラーが発生します:

implicit.cpp: In function ‘example f()’:
implicit.cpp:10:12: error: could not convert ‘(const char*)array’ from ‘const char*’ to ‘example’
     return array;
            ^
于 2012-11-21T05:07:59.870 に答える
0

宣言するだけでなく、サンプル クラスのコンストラクターを定義しましたか? 暗黙的な変換を使用したい場合、コンストラクターは重要だと思います。

于 2012-11-21T05:03:28.577 に答える