2

次の Stack クラスがあります。

class Stack{
public:
    int size;
    int* x;
    Stack() : size(10), x(new int[10]) {}
    Stack(const Stack& s) : x(new int[size=s.size]) {}

};

コピー コンストラクターの代入に注意してください。コードは機能し、正常にコンパイルされ、コンパイラ (gcc) は-Wall -Wextraフラグを使用しても文句を言いません。コンパイラは自動的にコンパイラをこれに書き換えますか?

Stack(const Stack& s) : size(s.size), x(new int[size]) {}

それとも何か別の魔法?定義の順序を変更すると、コンパイラが順序不同の初期化について不満を言うことに気付きました。だから私はそれが私が言ったケースだと思います。ドキュメントには何も見つかりませんでしたし、ASM の出力も役に立ちません。

4

4 に答える 4