关于初始化的问题。对于 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;
}
我现在很困惑。有人可以解释一下这个问题吗?
您可能想看看这个: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