初始化标量类型的对象时,初始化程序必须是单个表达式。
包含布尔值和枚举类型的整数类型对象、包含复数和虚数的浮点类型以及指向函数的指针类型的标量初始化器必须是可以用大括号括起来的单个表达式。
=expression(1) (expression ) (2) ) ) ) ) ) ) )。
将评估表达式,并将转换后的值作为初始化对象的初始值,就像分配给对象的类型一样。
注意
由于应用于转换的规则与赋值相同,因此在决定将表达式转换为哪种类型时,声明类型的const和volatile修饰符将被忽略。
请参阅初始化不使用初始化程序时应用的规则。
与所有其他初始化一样,在初始化静态或线程本地存储期间的对象时,expression必须是常量表达式。
表达式不能是逗号运算符,除非表达式包含在括号中。 因为顶级逗号被解释为下一个声明符的开始。
初始化浮点对象时,如果对象在运行时受到当前舍入的影响,则具有自动保留期的所有计算都将执行为。 根据math_errhandling的指定报告浮点错误。 对于具有静态和线程特定保留期的对象,在编译时完成计算不会引发异常。
voidf { # pragmastdcfenv _ accessonstaticfloatv=1.1e 75; //doesnotraiseexceptions 3360静态初始化
floatu[]={1.1e75}; //raisesFE_INEXACT
floatw=1.1e75; //raisesFE_INEXACT
doublex=1.1e75; //mayraisefe _ in exact (dependsonflt _ eval _ method ) )。
floaty=1.1e75f; //mayraisefe _ in exact (dependsonflt _ eval _ method ) )。
longdoublez=1.1e75; //doesnotraiseexceptions (conversionisexact ) }
范例
#includeintmain(void ) {
boolb=true; constdoubled=3.14;
intk=3.15; //conversionfromdoubletoint
intn={12},//optionalbraces*p=n,//non-constantexpressionokforautomaticvariable (* FP ) ) )=main; enum{RED,BLUE}e=RED; //enumerationsarescalartypesaswell }