空念 發表於 2025-12-12 16:55:00

类成员变量的初始化

<p>C++11中在初始化时可以使用 = ,也可以使用 {} ,也可以使用 ={} ;</p>
<p>需要注意的是:类中的静态成员变量只有<strong>静态常量,并且类型是整型或者枚举类型,才能在类内初始化,其他都得在类外初始化。</strong></p>
<pre><code class="language-c++">#include &lt;iostream&gt;
using namespace std;

class Base {
public:
        Base(){
        }
        Base(int num){
        }
        int a = { 4 };
        int b{ 1 };
        double cc = 1.23;
        char aa = 'a';
        string str = "hello";
        string str1{ "world" };
        //string str2("hello,world"); //用()则会报错,类内不能用()初始化,在类外这个是有参构造,可以使用。
        string str3 = { "hello" };
        static int c;
        static const double d;
        static const char* const e;//静态常量字符数组指向静态字符数组
        // 变量是静态常量,并且类型是整型或者枚举类型,才能在类内初始化,其他都得在类外初始化。
        const static int f = 0;//const static 和 static const 意义相同,没有区别
};
int Base::c = 8;
const double Base::d = 3.14;
const char* const Base::e = "i am luffy";

int main() {
    int ab { 4 };
    string str7 = { "hello" };
    string str8("888");
    string str9 { "888888" };
        return 0;
}

</code></pre>
<p>另外还提供了初始化列表:</p>
<pre><code class="language-c++">#include &lt;iostream&gt;
using namespace std;

class c {
public:
        c() :m_num(66), a(3), b(3) {

        }
        c(int n1, int n2, int n3) : m_num(n1),a(n2), b(n3){

        }
        int m_num = 8;
        int a;
        int b;
};

int main() {
        c c1;
        c c2(11,22,33);
        cout &lt;&lt; "c1.m_num = " &lt;&lt; c1.m_num &lt;&lt; "c1.a = " &lt;&lt; c1.a &lt;&lt; "c1.b = " &lt;&lt; c1.b &lt;&lt; endl;
        cout &lt;&lt; "c2.m_num = " &lt;&lt; c2.m_num &lt;&lt; "c2.a = " &lt;&lt; c2.a &lt;&lt; "c2.b = " &lt;&lt; c2.b &lt;&lt; endl;

        system("pause");
        return 0;
}
</code></pre>
<p>输出结果:</p>
<pre><code class="language-c++">c1.m_num = 66c1.a = 3c1.b = 3
c2.m_num = 11c2.a = 22c2.b = 33
</code></pre>
<p>使用初始化列表初始化成员变量</p>
<p>且从上面的程序中说明先运行了<code>int m_num = 8;</code>之后才进行初始化的<code>m_num{66}</code>;</p>
<p>那么和之前的<code>this-&gt;m_num = a;</code>初始化方式比较谁先运行呢?</p>
<pre><code class="language-c++">class c {
public:
        c(int n1, int n2, int n3) : m_num(n1),a(n2), b(n3){
                this-&gt;m_num = 99999;
        }
        int m_num = 8;
        int a;
        int b;
};

int main() {
        c c2(11,22,33);
        cout &lt;&lt; "c2.m_num = " &lt;&lt; c2.m_num &lt;&lt; "c2.a = " &lt;&lt; c2.a &lt;&lt; "c2.b = " &lt;&lt; c2.b &lt;&lt; endl;

        system("pause");
        return 0;
}
</code></pre>
<p>输出结果:</p>
<pre><code class="language-c++">c2.m_num = 99999c2.a = 22c2.b = 33
</code></pre>
<p>说明<code>this-&gt;m_num = 99999;</code>这种初始化方式是最后执行的。</p><br><br>
来源:https://www.cnblogs.com/ggkx/p/19342325
頁: [1]
查看完整版本: 类成员变量的初始化