?
Ce document utilise Manuel du site Web PHP chinois Libérer
初始化標量類型的對象時,初始化程序必須是單個表達式。
標量的初始化器(包括布爾值和枚舉類型的整數(shù)類型對象,包括復(fù)數(shù)和虛數(shù)的浮點類型以及包含指向函數(shù)的指針類型)必須是單個表達式,可以使用大括號括起來:
= expression | (1) | |
---|---|---|
= { expression } | (2) |
對表達式進行評估,并且其轉(zhuǎn)換后的值(如同通過分配給對象的類型一樣)將成為初始化對象的初始值。
由于適用于轉(zhuǎn)換的規(guī)則就像通過賦值一樣,所以在確定將表達式轉(zhuǎn)換為哪種類型時,將忽略聲明類型的const和volatile限定符。
請參閱不使用初始化程序時適用的規(guī)則的初始化。
與所有其他初始化一樣,在初始化靜態(tài)或線程局部存儲持續(xù)時間的對象時,expression必須是常量表達式。
表達式不能是逗號運算符(除非用括號括起來),因為頂層的逗號將被解釋為下一個聲明符的開始。
當初始化浮點類型的對象時,具有自動存儲持續(xù)時間的對象的所有計算都將執(zhí)行為 - 如果在執(zhí)行時并且受當前舍入影響; 按照math_errhandling中的指定報告浮點錯誤。對于靜態(tài)和線程局部存儲持續(xù)時間的對象,如果在編譯時計算完成,并且不會引發(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}