คำถามติดแท็ก decltype

2
เดคไทป์ (อัตโนมัติ) มีประโยชน์อะไรบ้าง?
Наэтотвопросестьответына Stack Overflow нарусском : Конструкция decltype (อัตโนมัติ) ใน c ++ 14 มีการใช้decltype(auto)สำนวน โดยปกติการใช้งานของมันคือการอนุญาตให้มีautoการประกาศใช้decltypeกฎระเบียบเกี่ยวกับการแสดงออกที่กำหนด ค้นหาตัวอย่างของการใช้คำว่า "ดี" ของสำนวนฉันสามารถนึกถึงสิ่งต่าง ๆ ดังต่อไปนี้ (โดยสก็อตต์เมเยอร์ส ) นั่นคือสำหรับการคืนค่าประเภทของฟังก์ชัน : template<typename ContainerType, typename IndexType> // C++14 decltype(auto) grab(ContainerType&& container, IndexType&& index) { authenticateUser(); return std::forward<ContainerType>(container)[std::forward<IndexType>(index)]; } มีตัวอย่างอื่น ๆ ที่คุณสมบัติภาษาใหม่นี้มีประโยชน์หรือไม่

2
ตัวดำเนินการลูกศร (->) ในส่วนหัวของฟังก์ชัน
ฉันเจอรหัสต่อไปนี้: template <typename T, typename T1> auto compose(T a, T1 b) -> decltype(a + b) { return a+b; } มีสิ่งหนึ่งที่ฉันไม่เข้าใจ: ฉันจะทราบได้อย่างไรว่าตัวดำเนินการลูกศร ( ->) หมายถึงอะไรในส่วนหัวของฟังก์ชัน ฉันเดาด้วยเหตุผลล้วนๆว่า->โอเปอเรเตอร์กำหนดประเภทซึ่งautoจะอนุมานได้ แต่ฉันต้องการตรงนี้ ฉันไม่พบข้อมูลใด ๆ
129 c++  c++11  auto  decltype 

2
ความแตกต่างระหว่าง std :: result_of และ Decltype
ฉันมีปัญหาในการทำความเข้าใจความจำเป็นstd::result_ofใน C ++ 0x ถ้าฉันเข้าใจถูกต้องresult_ofใช้เพื่อรับชนิดผลลัพธ์ของการเรียกใช้อ็อบเจ็กต์ฟังก์ชันด้วยพารามิเตอร์บางประเภท ตัวอย่างเช่น: template <typename F, typename Arg> typename std::result_of<F(Arg)>::type invoke(F f, Arg a) { return f(a); } ฉันไม่เห็นความแตกต่างกับรหัสต่อไปนี้: template <typename F, typename Arg> auto invoke(F f, Arg a) -> decltype(f(a)) //uses the f parameter { return f(a); } หรือ template <typename F, typename Arg> auto invoke(F …
100 c++  c++11  decltype  result-of 

6
เหตุใดการอ้างอิงจึงไม่ใช่ "const" ใน C ++
เราทราบว่า "ตัวแปร const" บ่งชี้ว่าเมื่อกำหนดแล้วคุณจะไม่สามารถเปลี่ยนตัวแปรได้เช่นนี้: int const i = 1; i = 2; โปรแกรมด้านบนจะไม่สามารถคอมไพล์ได้ gcc แจ้งข้อผิดพลาด: assignment of read-only variable 'i' ไม่มีปัญหาฉันเข้าใจได้ แต่ตัวอย่างต่อไปนี้อยู่นอกเหนือความเข้าใจของฉัน: #include<iostream> using namespace std; int main() { boolalpha(cout); int const i = 1; cout << is_const<decltype(i)>::value << endl; int const &ri = i; cout << is_const<decltype(ri)>::value << endl; …

3
C ++ decltype และวงเล็บ - ทำไม
มีการพูดถึง เรื่องนี้มาก่อนแต่นี่ไม่ได้ซ้ำกัน เมื่อมีคนถามถึงความแตกต่างระหว่างdecltype(a)และdecltype((a))คำตอบปกติคือ - aเป็นตัวแปร(a)คือการแสดงออก ฉันพบคำตอบนี้ไม่พอใจ อย่างแรกaคือการแสดงออกเช่นกัน ตัวเลือกสำหรับการแสดงออกหลักได้แก่ หมู่คนอื่น ๆ - (นิพจน์) ID-แสดงออก ที่สำคัญกว่านั้นการใช้ถ้อยคำสำหรับเดคไทป์จะพิจารณาวงเล็บอย่างชัดเจนมาก : For an expression e, the type denoted by decltype(e) is defined as follows: (1.1) if e is an unparenthesized id-expression naming a structured binding, ... (1.2) otherwise, if e is an unparenthesized id-expression naming a …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.