1

以下のコードでオブジェクトの明示的な初期化を行うにはどうすればよいですか...

#include"iostream"
using namespace std;

class per{
    char *name;
    int a;
public:
    per(int x = 0,char *str = 0):a(x),name(str){}

    char* get()
    {
        return name;
    }
};
int main()
{

    per obj(100,"test"); // works fine
    // now if i want a explicit initialization for above how will i do?
    // example -- per obj = (100,"test");
    // but i am getting error or may be not aware how to use
    return 0;
}
4

3 に答える 3

3

どうですか

per obj = per(100,"test");

用語は直接およびコピー初期化です。

初期化も明示的です。

于 2013-02-20T18:38:19.467 に答える
1

コメントされたコードの実際の問題、つまりper obj = (100,"test");. これは初期化されません。これは、ステートメントが最初に評価され100,(コンマ演算子を意味します)、次に初期化が行われるためです。

これで、割り当てper obj = (100,"test");は次のようになりますper obj = "test";int期待される最初のパラメーターが ではないため、これによりコンパイル エラーが発生しますchar *。この scuttle の問題がコンパイルの問題として発生するのは幸運です。コンストラクターで初期化の順序を変更するだけで、これは消えてしまいます..重大なバグが見過ごされる原因となります。基本的に、この場合、期待するものとコンパイラがステートメントを処理する方法は異なります。

于 2013-02-21T04:41:34.073 に答える
0

コンパイラが C++11 をサポートしている場合は、次のことができます。

per obj = { 100, "test" };
于 2013-02-20T19:03:37.553 に答える