Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基本数据类型的初始值_C++ - Fatal编程技术网

C++ 基本数据类型的初始值

C++ 基本数据类型的初始值,c++,C++,我想知道: 如何根据C++标准初始化每个值? 为什么GCC将它们全部初始化为零 更新 根据Erik的说法,这些值是零,因为我的堆栈恰好包含零。我尝试使用以下构造强制堆栈为非零: $ g++ -o test -O3 main.cpp $ ./test mc.mFirst: 0 mc.mSecond: 0 a: 0 有人能解释为什么吗 更新2 好吧,我知道了。GCC可能在优化未使用的变量 此应用程序显示了预期的行为: mc.mFirst: 0 mc.mSecond: 0 a: 0 它们(编辑:用

我想知道:

如何根据C++标准初始化每个值?
  • 为什么GCC将它们全部初始化为零
  • 更新 根据Erik的说法,这些值是零,因为我的堆栈恰好包含零。我尝试使用以下构造强制堆栈为非零:

    $ g++ -o test -O3 main.cpp
    $ ./test
    mc.mFirst: 0
    mc.mSecond: 0
    a: 0
    
    有人能解释为什么吗

    更新2 好吧,我知道了。GCC可能在优化未使用的变量

    此应用程序显示了预期的行为:

    mc.mFirst: 0
    mc.mSecond: 0
    a: 0
    
    它们(编辑:用“它们”表示未显式初始化的mSecond和a)未初始化。您的堆栈恰好包含0,因此这就是您得到的值

    8.5/9:

    如果未为指定初始值设定项 对象,并且该对象是 cv合格)非POD类类型(或 阵列),对象应为 默认初始化;如果对象是 对于const限定类型 基础类别类型应具有 用户声明的默认构造函数。 否则,如果没有使用初始值设定项 为非静态对象指定的 对象及其子对象(如果有), 起首字母不确定 价值如果对象或其任何 子对象是常量限定的 类型,则程序的格式不正确


    它们被归类为“未定义”,即编译器决定的内容或创建时该位置内存中的内容。基本上,让它们未初始化就是让它由机会决定,你应该初始化它们。我能想到的不初始化结构成员的唯一原因是,如果您有一个非常非常大的数组,并且不想多次调用构造函数。

    不是
    mFirst
    初始化为零,因为它在构造函数的initilizerlist中显式初始化为默认值?@Space:编辑并澄清了“它们”:
    int main()
    {
        // Fill the stack with non-zeroes
        {
            int a[100];
            memset(a, !0, sizeof(a));
        }
        MyClass mc;
        std::cout << "mc.mFirst: " << mc.mFirst << std::endl;
        std::cout << "mc.mSecond: " << mc.mSecond << std::endl;
    
        int a;
        std::cout << "a: " << a << std::endl;
        return 0;
    }
    
    mc.mFirst: 0
    mc.mSecond: 0
    a: 0
    
    #include <iostream>
    
    struct MyClass
    {
        MyClass() : mFirst() { }
    
        MyClass(int inFirst, int inSecond) : mFirst(inFirst), mSecond(inSecond) { }
    
        int mFirst;
        int mSecond;
    };
    
    
    int main()
    {
        // Fill the stack with non-zeroes
        // Use volatile to prevent GCC optimizations.
        {
            volatile MyClass mc(1, 2);
            volatile int a = 3;
        }
    
        {
            volatile MyClass mc;
            volatile int a;
    
            std::cout << "mc.mFirst: " << mc.mFirst << std::endl;
            std::cout << "mc.mSecond: " << mc.mSecond << std::endl;
            std::cout << "a: " << a << std::endl;
        }
        return 0;
    }
    
    $ g++ -o test main.cpp
    $ ./test 
    mc.mFirst: 0
    mc.mSecond: 2
    a: 3