在 C 11 中,如何為匿名的結構體新增建構函式?

時間 2021-06-06 20:36:58

1樓:暮無井見鈴

#include

intmain

()();

}foo

;std

::cout

<<&foo

<<'\n'

<

p_this

<

endl

;return0;

}可以用捕獲 this 的藍陀表示式再帶上 () ,替換最後乙個非靜態成員的預設初始化器。

但其他特殊成員函式似乎沒法手動定製……

2樓:胖財

顯然沒有名字的類是沒法顯式寫構造的,但是我們有C++11的non-static member in-class initialization,通常情況下你可以直接寫

struct

abc;

在用得到匿名類的通常場景下(純資料,臨時資料結構)這也足夠了。

那麼如果樓主堅持一定要在構造裡做點不可告人的事情怎麼辦?

根據C++ RAII的精神,構造和析構是對成員遞迴的。

我們可以構造乙個成員來幫忙執行一段函式:

struct

AutoExec

};struct};}

abc;

其中AutoExec類的唯一用途就是把任意函式(或functor,lambda)通過模板建構函式執行掉,於是就可以再結合成員初始化來代替匿名類的構造了。

C 11中的decltype和declval表示什麼意思,它們是如何使用的,會在什麼時候使用?

Lancern 假設我們希望實現乙個類似於 std iterator traits 的模板類,它接收乙個模板引數表示乙個迭代器的型別,並通過乙個成員型別別名 ValueType 輸出迭代器經解引用操作後得到的型別 template Iter class MyIteratorTraits 我們考慮應該...

怎樣理解C 11中的條件變數?

葉綠素 條件變數要和鎖一起使用,鎖提供了互斥這一機制,而條件變數在其基礎上提供了同步的機制 同步是比互斥更嚴格的關係,互斥只要求執行緒間訪問某一資源時不存在同時處理或者交替處理的可能,而對執行緒本身的排程順序沒有限制,也就是說誰先訪問都行但你們乙個個來,這就是互斥。同步就是在互斥的基礎上,雖然執行緒...

C 11中的auto和decltype的原理

已登出 auto使用的是模板實參推斷 Template Argument Deduction 的機制。auto被乙個虛構的模板型別引數T替代,然後進行推斷,即相當於把變數設為乙個函式引數,將其傳遞給模板並推斷為實參,auto相當於利用了其中進行的實參推斷,承擔了模板引數T的作用。比如 templat...