code style

2016年11月27日 星期日

c++ - non-trivial designated initializers not supported

很久沒用C++了,從C又換到C++編譯器遇到的一個小問題,但是也困擾了很久...
在C的complier上,struct或enum,可以指定初值且不按順序,但在C++上指定初值時
並須按順序且不能跳過。

這是因為C++指援不定引數的功能,例如在function上傳的引數,可以在runtime時
決定要傳幾個。例如void fun(int a, int b=1, int c=2),而在使用時可決定只用fun(10)fun(10,11,12)。 但是不能跳過,例如void fun(int a=2, int b, int c=3),只能從最右邊開始
給定初值 。

這次程式中在定義enum並指定初值的時後,有一個值未defined造成有一個值跳過去,故
一直出現此錯誤,但這個寫法在C的complier上是很常見的。

補充:
non-trivial constructor/destructor
意思是指class或struct的非默認建構/解構子

沒有留言:

張貼留言