下面的代碼編譯好與G ++ 4.7.2:使用數組作爲元組成員:有效的C++ 11元組聲明?
#include <tuple>
std::tuple<float,int[2]> x;
隨着鐺++ 3.2,然而,將產生下面的錯誤:
錯誤:數組初始化必須是一個初始化列表。
如果我從元組聲明中刪除float
類型,錯誤消失。上面的元組聲明是否有效?
($ CXX -std = C++ 11 -c file.cpp)
下面的代碼編譯好與G ++ 4.7.2:使用數組作爲元組成員:有效的C++ 11元組聲明?
#include <tuple>
std::tuple<float,int[2]> x;
隨着鐺++ 3.2,然而,將產生下面的錯誤:
錯誤:數組初始化必須是一個初始化列表。
如果我從元組聲明中刪除float
類型,錯誤消失。上面的元組聲明是否有效?
($ CXX -std = C++ 11 -c file.cpp)
我不認爲這是在禁止你的宣言的標準什麼。但是,只要嘗試初始化,複製,移動或分配元組,就會遇到問題,因爲對於這些操作,元組的所有成員類型必須能夠用作初始值,可複製構造,可複製賦值和可移動賦值(§20.4.2.1)。這些都不是陣列的情況。
你會更好使用std::array
而不是C風格的數組:
#include <tuple>
#include <array>
std::tuple<float,std::array<int,2> > x;
嗯。如果所有這些東西都不可能用於數組,我們是否真的認爲該聲明是有效的?至少不是CopyAssignable/MoveAssignable可能是成員類型的強制性要求? – 2013-02-11 00:19:56
好的規則似乎都是侷限於個體操作(20.4)。 – 2013-02-11 00:22:05
@LightnessRacesinOrbit由於Standard定義了每個操作的需求(例如,只有在使用元組的複製構造函數時才需要CopyConstructible),我相信它不是Standard的明確要求(與向量相同的情況)。但如果我們有了概念,那麼你可能是對的。 – jogojapan 2013-02-11 00:22:28
GCC非地規範允許包含數組省略在初始化器列表語法外括號沒有'='符號結構。我認爲你不可以做數組的元組,因爲數組是不可分配的。 – 2013-02-10 23:51:52
今晚我不能重複錯誤。 – user2023370 2013-02-11 23:50:54