cost 302 ms
為什么“保證復制省略”不意味着 push_back({arg1, arg2}) 與 emplace_back(arg1, arg2) 相同?

[英]Why doesn't "Guaranteed Copy Elision" mean that push_back({arg1, arg2}) is the same as emplace_back(arg1, arg2)?

首先,我聽說Guaranteed Copy Elision是用詞不當(據我目前了解,它更多是關於從根本上重新定義基本價值類別,r/l-values 到 l/x/pr-values,這從根本上改變了意義和副本的要求),但由於這是通常所說的,我也會這樣做。 在閱讀了一些關於這個主題的內容之后,我想我終 ...

如何區分 pr 值和 x 值

[英]How to distinguish between pr-values and x-values

在下面的代碼中, 我知道在var1的構造函數中傳遞的參數的值類別是左值, var2是 x 值, var3是 pr 值。 我希望my_type的構造函數接受var3 ,而var1和var2應該發出編譯器錯誤。 var1很容易通過刪除構造函數 (1) 來解決,但我找不到區分var2和var3的方法。 ...

參考綁定期間純右值的 Cv 限定

[英]Cv-qualifications of prvalues during reference binding

考慮這個例子: 控制引用初始化的規則在[dcl.init.ref]/5中找到: 對“ cv1 T1 ”類型的引用由“ cv2 T2 ”類型的表達式初始化,如下所示: (5.1) [..] (5.2) [..] (5.3) 否則,如果初始化表達式 (5.3.1) 是一個右值 [..] 並且“ c ...

創建純右值的轉換如何創建臨時對象?

[英]How conversions that creates prvalue are create temporary objects?

來自cppreference 在以下情況下會創建臨時對象: 創建純右值的轉換(包括 T(a,b,c) 和 T{}) 這什么時候可以發生? (示例將不勝感激) “包括 T(a,b,c) 和 T{}”是什么意思? static_cast<T>(e) 、 const_cast<T ...

引用如何綁定到純右值?

[英]How references can bind to prvalues?

cppreference 說:當引用綁定到prvalue時,會創建一個臨時的object。 它們是指 const 左值引用和右值引用嗎?: 臨時對象在prvalue被具體化時創建,以便它可以用作glvalue,這在以下情況下發生(自C++17起): 綁定對純右值的引用如果他們的意思是,右值引用和 ...

指定臨時對象的表達式如何是 xvalue 表達式?

[英]How expressions designating temporary objects are xvalue expression?

從cppreference ,我試圖理解產生 xvalues 的表達式,最后我得到了這個總結: 以下表達式是 xvalue 表達式: ... 在臨時具體化之后指定臨時 object 的任何表達式。 臨時實現是: 任何完整類型 T 的純右值都可以轉換為相同類型 T 的虛值。此轉換通過用臨時值 o ...

C++17 編譯器(gcc 或 Microsoft Visual C++),是否有禁止“不產生臨時”功能的選項

[英]The C++17 compiler (gcc or Microsoft Visual C++), does it have an option that prohibit the feature "not produce a temporary"

在以下情況下,我如何告訴 С++17 編譯器創建臨時文件(即 C++17 編譯器必須考慮復制/移動操作,例如 C++11 和 C++14 編譯器這樣做) Output(c++14 - 這就是我想要的): Output (c++17): My Customer have a ton of C++ ...

使 ++o++ 抱怨具有用戶定義的前置和后綴增量運算符的類型

[英]Make ++o++ complain for types with user defined pre- and postfix increment operators

我正在尋找一種方法來防止++x++對具有用戶定義的前綴和后綴增量運算符的類型起作用。 對於內置類型,后綴運算符的結果類型不是左值而是純右值表達式,編譯器抱怨得很好。 我能想到的最簡單的事情是為后綴增量運算符返回 const: 這是一個神螺栓。 這種方法有缺陷嗎? 編輯: 多虧了答案,我在這里、 這里 ...

xvalue 和 prvalue 之間的一些差異

[英]Some differences between xvalue and prvalue

我最近一直在仔細研究 C++ 類別。 左值和右值之間的區別似乎很明顯,但是當涉及到純右值和 x 值時,我感到困惑。 鑒於以下示例: 運行示例,控制台顯示: 123 123 123 -858993460 誰能解釋為什么它在最后一個輸出中給出了意外的值? 這個例子顯示了關於 xvalue 的 ...

prvalues的cv-qualifications (revisited)

[英]Cv-qualifications of prvalues (revisited)

這是我之前的問題的后續問題,其中明顯的共識是,prvalues 的 cv-qualifications 處理的變化只是一個相當小的和無關緊要的變化,旨在解決一些不一致的問題(例如,返回 prvalues 並聲明為 cv-qualified return 的函數類型)。 但是,我在標准中看到另一個地 ...

C++ 標准 N3337 5.2.10 第 7 條中的“類型純右值”是什么意思?

[英]What does this mean "prvalue of type“ in C++ standard N3337 5.2.10 clause 7?

在C++ 草案標准 N3337第5.2.10節Reinterpret cast解釋強制轉換條款 7 (強調我的): 對象指針可以顯式轉換為指向不同類型的對象指針。 當“指向 T1 的指針”類型的純右值 v轉換為“指向 cv T2 的指針”類型時,如果 T1 和 T2 都是標准的,則結果為sta ...

為什么返回拋出std :: exception()在void函數中被接受?

[英]Why is return throw std::exception() accepted in a void function?

我在return后錯誤地粘貼了一個throw語句,結果如下: 我在注意到錯誤之前成功構建了解決方案,我很好奇哪個規范允許上面的語法。 通過閱讀cppreference.com (在Notes下),我明白了 throw-expression被歸類為void類型的prval ...

是否將prvalue移入函數模板uref參數?

[英]Move a prvalue into function template uref argument or not?

我的問題是,將std ::: pr(或不)將prvalue移入一個包羅萬象的函數模板是否有意義,該模板因此在其簽名中采用了通用引用T &&。 我也想知道復制移動省略/ RVO是否在此決定中起作用。 問題:引用折疊會導致foo被T &&(右值引用)調用,或者 ...

我們如何測試是否可以使用prvalue調用某個類型的表達式?

[英]How do we test if an expression of a certain type can be invoked with a prvalue?

使用c ++ 17,我們有一些新的is_invocable和花哨的新prvalues,它們並不是真正的值。 這允許您創建一個對象而無需首先在邏輯上構造它,然后忽略構造。 我遇到了一個問題,使用std::is_invocable來測試你是否可以調用某些內容,而prvalue規則似乎會發 ...

在獲取此地址時,“表達式必須是l值或函數指示符”錯誤

[英]“expression must be an l-value or function designator” error when taking the address of this

我試圖用C ++做到這一點: 而且我在visual studio 2015中得到“表達式必須是l值或函數指示符”錯誤。所以我不明白我哪里出錯了。 據我所知, &this應該是類型Abc**對嗎? 函數定義不是我要改變的。 所以我不能只改變參數類型。 ...


 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM