?
? ????? PHP ??? ???? ??? ?? ??
初始化標(biāo)量類(lèi)型的對(duì)象時(shí),初始化程序必須是單個(gè)表達(dá)式。
標(biāo)量的初始化器(包括布爾值和枚舉類(lèi)型的整數(shù)類(lèi)型對(duì)象,包括復(fù)數(shù)和虛數(shù)的浮點(diǎn)類(lèi)型以及包含指向函數(shù)的指針類(lèi)型)必須是單個(gè)表達(dá)式,可以使用大括號(hào)括起來(lái):
= expression | (1) | |
---|---|---|
= { expression } | (2) |
對(duì)表達(dá)式進(jìn)行評(píng)估,并且其轉(zhuǎn)換后的值(如同通過(guò)分配給對(duì)象的類(lèi)型一樣)將成為初始化對(duì)象的初始值。
由于適用于轉(zhuǎn)換的規(guī)則就像通過(guò)賦值一樣,所以在確定將表達(dá)式轉(zhuǎn)換為哪種類(lèi)型時(shí),將忽略聲明類(lèi)型的const和volatile限定符。
請(qǐng)參閱不使用初始化程序時(shí)適用的規(guī)則的初始化。
與所有其他初始化一樣,在初始化靜態(tài)或線程局部存儲(chǔ)持續(xù)時(shí)間的對(duì)象時(shí),expression必須是常量表達(dá)式。
表達(dá)式不能是逗號(hào)運(yùn)算符(除非用括號(hào)括起來(lái)),因?yàn)轫攲拥亩禾?hào)將被解釋為下一個(gè)聲明符的開(kāi)始。
當(dāng)初始化浮點(diǎn)類(lèi)型的對(duì)象時(shí),具有自動(dòng)存儲(chǔ)持續(xù)時(shí)間的對(duì)象的所有計(jì)算都將執(zhí)行為 - 如果在執(zhí)行時(shí)并且受當(dāng)前舍入影響; 按照math_errhandling中的指定報(bào)告浮點(diǎn)錯(cuò)誤。對(duì)于靜態(tài)和線程局部存儲(chǔ)持續(xù)時(shí)間的對(duì)象,如果在編譯時(shí)計(jì)算完成,并且不會(huì)引發(fā)異常:
void f(void){#pragma STDC FENV_ACCESS ON static float v = 1.1e75; // does not raise exceptions: static init float u[] = { 1.1e75 }; // raises FE_INEXACT float w = 1.1e75; // raises FE_INEXACT double x = 1.1e75; // may raise FE_INEXACT (depends on FLT_EVAL_METHOD) float y = 1.1e75f; // may raise FE_INEXACT (depends on FLT_EVAL_METHOD) long double z = 1.1e75; // does not raise exceptions (conversion is exact)}
#include <stdbool.h>int main(void){ bool b = true; const double d = 3.14; int k = 3.15; // conversion from double to int int n = {12}, // optional braces *p = &n, // non-constant expression OK for automatic variable (*fp)(void) = main; enum {RED, BLUE} e = RED; // enumerations are scalar types as well}