Pet*_*ham 19
这是C99标准第6.5.2.5节中定义的复合文字.
它不是C++语言的一部分,因此C++编译器不编译它就不足为奇了.(或Java或Ada编译器)
复合文字的值是初始化列表初始化的未命名对象的值.如果复合文字出现在函数体外,则该对象具有静态存储持续时间; 否则,它具有与封闭块相关的自动存储持续时间.
所以不,它不会破坏堆栈.编译器为对象分配存储空间.
括号是围绕类型放置的,然后是初始化列表 - 它不是强制转换,因为裸初始化列表在C99语法中没有意义; 相反,它是一个后缀运算符,应用于产生给定类型的对象的类型.您没有创建{ 0, 3 }并将其转换为数组,而是使用int[2]值0和3 初始化a .
至于为什么使用它,我在单行中看不出它的好理由,尽管它可能被重新分配以指向其他数组,所以它是一个较短的方式来做前两行:
int default_a[] = { 0, 2 };
int *a = default_a;
if (some_test) a = get_another_array();
Run Code Online (Sandbox Code Playgroud)
我发现将临时联合传递给函数很有用
// fills an array of unions with a value
kin_array_fill ( array, ( kin_variant_t ) { .ref = value } )
Run Code Online (Sandbox Code Playgroud)
这是一个c99构造,称为复合文字.
从2005年5月的委员会草案第6.5.2.5节:
后缀表达式由带括号的类型名称后跟括号括起的初始值列表组成,是一个复合文字.它提供了一个未命名的对象,其值由初始化列表给出.
...
示例1文件范围定义
int *p = (int []){2, 4};
Run Code Online (Sandbox Code Playgroud)
初始化p指向两个整数数组的第一个元素,第一个元素的值为2,第二个元素的值为4.此复合文字中的表达式必须是常量.未命名的对象具有静态存储持续时间.
| 归档时间: |
|
| 查看次数: |
521 次 |
| 最近记录: |