语法理解问题

时间:2017-04-06 09:31:07

标签: c++ c++11

请帮我理解主要功能中的一行。这意味着什么

#include<iostream>

struct ABC
    {
      private:
       int A,
       float B;

      public :
       ABC() {};
       ~ABC(){};

    };

    int main()
    {
       ABC A={};     // What does this statement means?
      return 0;
    }

4 个答案:

答案 0 :(得分:2)

ABC A={}与调用没有参数的构造函数相同。在您的情况下,它是ABC A = ABC();

让我们考虑这个类(公共构造函数为0/1/2 params)

class Hello {
private:
  int x;
  float y;
public:
  Hello() {}
  Hello(int _x) : x(_x) {}
  Hello(int _x, float _y) : x(_x), y(_y) {}
};

Hello h = {} == Hello h = Hello() ==只是Hello h

Hello h = {1} == Hello h = Hello(1) == Hello h; h.x = 1;

Hello h = {1, 2} == Hello h = Hello(1, 2) == Hello h; h.x = 1; h.y = 2;

答案 1 :(得分:1)

ABC A={};

自c ++ 11以来,这被称为copy-list-initialization。在这种特殊情况下,它与调用ABC A;ABC A{}ABC A()等相同。它所做的只是初始化一个调用构造函数的对象。

答案 2 :(得分:0)

在你的情况下ABC A={};将调用默认构造函数,但是......如果你的类没有默认构造函数(由你提供)= {}初始化会做“魔术” - 它会初始化所有具有“零/默认值”的结构/类成员,即:0表示数值类型,0.0表示浮点类型,nullptr表示指针...这比默认默认构造函数更多。

答案 3 :(得分:0)

在C ++中,无论{};

如何,它都没有区别

但如果它像C风格的结构一样,那么ABC A={};会将其成员A和B重置为零。

struct ABC
{
    int A;
    float B;
};