关于初始化的问题。 C++11 及之后的输出必须为零?

问题描述 投票:0回答:1

关于初始化的问题。对于 C++11,输出必须为零,然后对于下面的代码片段

#include <iostream>
#include <memory>

struct Point{int x;int y;};

struct Line {Point start; Point end;};

class Demo{
public:
    Demo() = default;
    Line line;
};

int main()
{
    auto ptr = std::make_shared<Demo>();
    std::cout << ptr->line.start.x << std::endl;
    std::cout << ptr->line.start.y << std::endl;

    Demo demo;
    std::cout << demo.line.start.x << std::endl;
    std::cout << demo.line.start.y << std::endl;

    Demo demo1{};
    std::cout << demo1.line.start.x << std::endl;
    std::cout << demo1.line.start.y << std::endl;
}

我现在很困惑。有人可以解释一下这个问题吗?

c++ c++11
1个回答
0
投票

您可能想看看这个:https://en.cppreference.com/w/cpp/language/list_initialization

Demo d; // d is not initialized so has garbage value 

Demo demo {3, 4};
std::cout << demo.line.start.x << std::endl; //prints 3
std::cout << demo.line.start.y << std::endl; //prints 4

Demo demo1{}; // == demo1{0,0} value-init to 0
std::cout << demo1.line.start.x << std::endl; //prints 0
std::cout << demo1.line.start.y << std::endl; //prints 0
© www.soinside.com 2019 - 2024. All rights reserved.