1
請看下面的例子:實際實例化標籤分派對象嗎?
class MyHeavyObject
{
MyHeavyObject()
{
// lots of initialisation
// ...
}
};
template<typename T>
void RegisterObject(T)
{
DoSomethingWith<T>();
}
現在,如果我叫
RegisterObject(MyHeavyObject());
將編譯器理解MyHeavyObject
從未實際使用和優化呼叫,或將對象的實例被創建?我會對這個標準所說的和編譯器的實際操作感興趣。
我相信任何允許編譯器對其進行optomize的規則會導致RAII類型'locks'被允許編譯出來... – IdeaHat 2014-10-03 18:49:46
該標準禁止在構造函數非常重要時優化掉本地對象,即改變程序的效果。但*任何*可以在as-if規則下優化。這意味着你有一個有保證的效果,或者缺乏效果,並且就效率而言,你只需** MEASURE **。 – 2014-10-03 18:50:51
你是什麼意思標題中的「標籤分派對象」。這與你的例子有什麼關係嗎?另外,你的措辭「從來沒有實際使用過」表明有些東西可能被誤解爲使用,但你的例子並沒有顯示出這種情況,它是什麼。 – 2014-10-03 18:53:11