zoukankan      html  css  js  c++  java
  • C and C++ : Partial initialization of automatic structure

    Refer to:

    http://stackoverflow.com/questions/10828294/c-and-c-partial-initialization-of-automatic-structure

    The points,

    The linked gcc documentation does not talk of Partial Initialization it just talks of (Complete)Initialization or No Initialization.

    What is partial Initialization?

    The standards do not define Partial initialization of objects, either there is Complete initialization or No-initialization. Partial Initialization is a non-standard terminology which commonly refers a situation where you provide some initializers but not all i.e: Fewer initializers than the size of the array or the number of structure elements being initialized.

    Example:

    int array[10]={1,2};//Case 1:Partial Initialization

    What is (Complete)Initialization or No Initialization?

    Initialization means providing some initial value to the variable being created at the same time when it is being created. ie: in the same code statement.

    Example:

    int array[10]={0,1,2,3,4,5,6,7,8,9};//Case 2:Complete Initialization

    int array[10];//Case 3:No Initialization

    Following quoted paragraph describes the behavior for Case 3.

    If you do not initialize a structure variable, the effect depends on whether it is has static storage (see Storage Class Specifiers) or not. If it is, members with integral types are initialized with 0 and pointer members are initialized to NULL; otherwise, the value of the structure's members is indeterminate.


    The rules regarding Partial Initialization(Case 1) are well defined by the standard and these rules do not depend on the storage type of the variable being initialized.
    AFAIK, All mainstream compilers have 100% compliance to these rules.


    Can someone please tell me what the C and C++ standards say regarding partial automatic structure and automatic array initialization?

    The C and C++ standards guarantee that even if an integer array is located on automatic storage and if there are fewer initializers in a brace-enclosed list then the uninitialized elements must be initialized to 0.

    C99 Standard 6.7.8.21

    If there are fewer initializers in a brace-enclosed list than there are elements or members of an aggregate, or fewer characters in a string literal used to initialize an array of known size than there are elements in the array, the remainder of the aggregate shall be initialized implicitly the same as objects that have static storage duration.


    In C++ the rules are stated with a little difference.

    C++03 Standard 8.5.1 Aggregates
    Para 7:

    If there are fewer initializers in the list than there are members in the aggregate, then each member not explicitly initialized shall be value-initialized (8.5). [Example:

    struct S {int a;char* b;int c;};
     S ss ={1,"asdf"};

    initializes ss.a with 1, ss.b with "asdf", and ss.c with the value of an expression of the form int(), that is,0. ]

    While Value Initialization is defined in,
    C++03 8.5 Initializers
    Para 5:

    To value-initialize an object of type T means:
    — if T is a class type (clause 9) with a user-declared constructor (12.1), then the default constructor for T is called (and the initialization is ill-formed if T has no accessible default constructor);
    — if T is a non-union class type without a user-declared constructor, then every non-static data member and base-class component of T is value-initialized;
    — if T is an array type, then each element is value-initialized;
    — otherwise, the object is zero-initialized

  • 相关阅读:
    js 页面按钮提交后 创建显示loading div 操作完成后 再隐藏或删除 进度div
    [转]利用vertical-align:middle实现在整个页面居中
    IP地址查询
    [转]js 判断js函数、变量是否存在
    [转]RDLC报表格式化format表达式
    [转]不用安装Oracle Client如何使用PLSQL Developer
    [转]使用 YCombo 做 JS /CSS开发 合并 压缩
    [转]jQuery为控件添加水印文字
    [转]DataTable用中使用Compute 实现简单的DataTable数据的统计
    [转]Web性能监控自动化探索之路–初识WebPageTest
  • 原文地址:https://www.cnblogs.com/hfyinsdu/p/3725601.html
Copyright © 2011-2022 走看看