亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何模擬C數組初始化“int arr[]={e1,e2,E3,…}“行為與STD:數組?

如何模擬C數組初始化“int arr[]={e1,e2,E3,…}“行為與STD:數組?

C++
紫衣仙女 2019-12-18 11:13:40
如何模擬C數組初始化“int arr[]={e1,e2,E3,…}“行為與STD:數組?它獨特的初始化特性:int arr[] = { 1, 3, 3, 7, 0, 4, 2, 0, 3, 1, 4, 1, 5, 9 };我們不需要指定元素的數量,萬歲!現在用C+11函數迭代它std::begin和std::end從…<iterator> (或者你自己的變體你甚至不需要考慮它的大小?,F在,是否有任何方法(可能是TMP)來實現與std::array?使用宏可以使它看起來更好看。*)??? std_array = { "here", "be", "elements" };編輯*根據各種答案匯編的中間版本如下:#include <array>#include <utility>template<class T, class... Tail, class Elem = typename std::decay<T>::type>std::array<Elem,1+sizeof...(Tail)> make_array(T&& head, Tail&&... values){  return { std::forward<T>(head), std::forward<Tail>(values)... };}// in codeauto std_array = make_array(1,2,3,4,5);并使用了所有酷C+11的東西:可變模板sizeof...rvalue引用完美轉發std::array當然,均勻初始化忽略具有一致初始化的返回類型類型推斷(auto)可以找到一個例子這里.不過,正在對@Xaade的答案的注釋中指出的那樣,您不能用這樣的函數初始化嵌套類型。例子:struct A{ int a; int b; };// C syntaxA arr[] = { {1,2}, {3,4} };// using std::array??? std_array = { {1,2}, {3,4} };此外,初始化器的數量僅限于實現支持的函數和模板參數的數量。
查看完整描述

3 回答

?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

我能想到的是:

template<class T, class... Tail>auto make_array(T head, Tail... tail) -> std::array<T, 1 + sizeof...(Tail)>{
     std::array<T, 1 + sizeof...(Tail)> a = { head, tail ... };
     return a;}auto a = make_array(1, 2, 3);

但是,這要求編譯器執行NRVO,然后跳過返回值的副本(這也是合法的,但不是必需的)。實際上,我希望任何C+編譯器都能對其進行優化,使其與直接初始化一樣快。




查看完整回答
反對 回復 2019-12-19
?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

我想要一個簡單的make_array.

template<typename ret, typename... T> std::array<ret, sizeof...(T)> make_array(T&&... refs) {
    // return std::array<ret, sizeof...(T)>{ { std::forward<T>(refs)... } };
    return { std::forward<T>(refs)... };}


查看完整回答
反對 回復 2019-12-19
  • 3 回答
  • 0 關注
  • 393 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號