Explicit initialization of struct/class members

前端 未结 4 1981
清歌不尽
清歌不尽 2021-02-13 15:22
struct some_struct{
    int a;
};
some_struct n = {};

n.a will be 0 after this;

I know this braces form of initialization is inherited from C a

相关标签:
4条回答
  • 2021-02-13 16:02

    I find the following link to be very informative on this particular issue

    • http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=/com.ibm.xlcpp8l.doc/language/ref/strin.htm
    0 讨论(0)
  • 2021-02-13 16:10

    It is standard in C++, it isn't in C.

    The syntax was introduced to C++, because some objects can't be initialized with 0, and there would be no generic way to perform value-initialization of arrays.

    0 讨论(0)
  • 2021-02-13 16:18

    The empty braces form of initialization is standard in C++ (it's permitted explicitly by the grammar). See C Static Array Initialization - how verbose do I need to be? for more details if you're interested.

    I assume that it was added to C++ because it might not be appropriate for a 0 value to be used for a default init value in all situations.

    0 讨论(0)
  • 2021-02-13 16:26

    The {0} is C99 apparently.

    Another way to initialize in a C89 and C++ compliant way is this "trick":

    struct some_struct{ int a; };

    static some_struct zstruct;

    some_struct n = zstruct;

    This uses the fact that static variables are pre-initialized with 0'ed memory, contrary to declarations on the stack or heap.

    0 讨论(0)
提交回复
热议问题