2

つまり、さまざまな構造/クラスがたくさんあり、これらすべての素晴らしさは、事前に既知の値で初期化されます。これらの構造体/クラスは、事前に初期化されたものを除いて他の方法で使用されることはないため、コンストラクターは必要ありません。これは、余分なメモリ、プログラムの余分な CPU サイクル、およびソース コードの余分なスペースを浪費するだけです。

4

6 に答える 6

6

C++11 コンパイラにアクセスできる場合は、コンストラクタconstexprをコンパイル時に実行するようにマークできます。これの利点は、実行時にオブジェクトを構築できることです。例えば

struct Point2D {
    constexpr Point2D(int x, int y) : x_{x}, y_{y} {}
    int x_, y_;
};

そして、Point2D のコンストラクターを使用して、実行時ではなくコンパイル時に初期化できるようになりました。

Point2D p{3, 4}; // no runtime overhead.
于 2013-10-18T14:15:49.583 に答える
5

構造体とクラスは、限られた状況で初期化できます。

struct splendor {
    int i, j;
    char *name;
};

splendor iforus = { 1, 2, "Extra!" };

さらに、構造体の型の名前がまったく必要ない場合:

struct {
    int k;
    float q;
} anon_e_mouse = { 1, 2.3 };
于 2013-10-18T14:15:21.480 に答える
1

クラス (または構造体) にコンストラクターがない場合は、次のように初期化できます。

MyClass a = MyClass();

また

MyClass * b = new MyClass();

これは値の初期化と呼ばれ、通常はゼロ初期化に相当します。

于 2013-10-18T14:21:50.790 に答える
1

C++11 では、initializer_list が提供されます。

#include <iostream>

struct s
{
    int i;  
};
int main() {
    s s1={666};
    s s2={42};
    std::cout<<s1.i<<" "<<s2.i<<std::endl;
    return 0;
}

メンバーのクラス内初期化を行うこともできます。

#include <iostream>
struct s
{
    int i=0;    
};
int main() {
    s s1; //s1.i = 0
    //s s2={42}; //fails
    std::cout<<s1.i<<" "<<std::endl;
    return 0;
}

ただし、同時にボットを行うことはできません。

于 2013-10-18T14:22:52.183 に答える