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

C ++ เป็นภาษาโปรแกรมทั่วไป เดิมได้รับการออกแบบให้เป็นส่วนขยายของ C และมีไวยากรณ์ที่คล้ายกัน แต่ตอนนี้มันเป็นภาษาที่แตกต่างอย่างสิ้นเชิง ใช้แท็กนี้สำหรับคำถามเกี่ยวกับรหัส (จะ) คอมไพล์ด้วยคอมไพเลอร์ C ++ ใช้แท็กเฉพาะรุ่นสำหรับคำถามที่เกี่ยวข้องกับการแก้ไขมาตรฐานเฉพาะ [C ++ 11], [C ++ 14], [C ++ 17] หรือ [C ++ 20] เป็นต้น

10
การแทนที่ตัวนับลูป 32 บิตเป็น 64 บิตจะนำเสนอการเบี่ยงเบนประสิทธิภาพที่บ้าคลั่งด้วย _mm_popcnt_u64 บน Intel CPUs
ฉันกำลังมองหาวิธีที่เร็วที่สุดในการจัดpopcountเก็บข้อมูลขนาดใหญ่ ฉันพบลักษณะพิเศษที่แปลกมาก : การเปลี่ยนตัวแปรลูปจากunsignedเป็นuint64_tทำให้ประสิทธิภาพลดลง 50% บนพีซีของฉัน เกณฑ์มาตรฐาน #include <iostream> #include <chrono> #include <x86intrin.h> int main(int argc, char* argv[]) { using namespace std; if (argc != 2) { cerr << "usage: array_size in MB" << endl; return -1; } uint64_t size = atol(argv[1])<<20; uint64_t* buffer = new uint64_t[size/8]; char* charbuffer = …

11
rvalues, lvalues, xvalues, glvalues ​​และ prvalues ​​คืออะไร?
ใน C ++ 03, การแสดงออกเป็นทั้งrvalueหรือlvalue ใน C ++ 11 นิพจน์สามารถเป็น: rvalue lvalue Xvalue glvalue prvalue สองประเภทได้กลายเป็นห้าประเภท นิพจน์ประเภทใหม่เหล่านี้มีอะไรบ้าง หมวดหมู่ใหม่เหล่านี้เกี่ยวข้องกับหมวด rvalue และ lvalue ที่มีอยู่ได้อย่างไร หมวดหมู่ rvalue และ lvalue ใน C ++ 0x เหมือนกับที่อยู่ใน C ++ 03 หรือไม่? เหตุใดจึงต้องมีหมวดหมู่ใหม่เหล่านี้ เป็นWG21เทพแค่พยายามที่จะสร้างความสับสนให้เราปุถุชนเพียง?
1356 c++  expression  c++-faq  c++11 

18
ความแตกต่างระหว่าง const int *, const int * const และ int const * คืออะไร
ฉันมักจะเลอะวิธีการใช้งานconst int*, const int * constและint const *อย่างถูกต้อง มีชุดของกฎที่กำหนดสิ่งที่คุณสามารถทำได้และทำไม่ได้? ฉันต้องการรู้สิ่งที่ควรทำและสิ่งที่ไม่ควรทำในแง่ของการมอบหมายผ่านไปยังฟังก์ชั่นอื่น ๆ
1356 c++  c  pointers  int  const 

25
เหตุใดเราจึงต้องการฟังก์ชันเสมือนใน C ++
ฉันกำลังเรียนรู้ C ++ และฉันเพิ่งเข้าสู่ฟังก์ชั่นเสมือนจริง จากสิ่งที่ฉันได้อ่าน (ในหนังสือและออนไลน์) ฟังก์ชันเสมือนเป็นฟังก์ชันในคลาสพื้นฐานที่คุณสามารถแทนที่ในคลาสที่ได้รับ virtualแต่ก่อนหน้านี้ในหนังสือเล่มนี้เมื่อการเรียนรู้เกี่ยวกับมรดกพื้นฐานก็สามารถที่จะแทนที่ฟังก์ชั่นฐานในชั้นเรียนมาโดยไม่ต้องใช้ ดังนั้นสิ่งที่ฉันหายไปที่นี่ ฉันรู้ว่ามีฟังก์ชั่นเสมือนจริงมากขึ้นและดูเหมือนว่าจะมีความสำคัญดังนั้นฉันจึงต้องการชัดเจนว่ามันคืออะไร ฉันไม่สามารถหาคำตอบแบบตรงออนไลน์ได้

6
ฉันต้องใส่คำหลัก“ เทมเพลต” และ“ พิมพ์ชื่อ” ที่ไหนและทำไม
ในแม่ที่และทำไมฉันต้องใส่typenameและtemplateรายชื่อขึ้นอยู่? ชื่อที่ขึ้นต่อกันคืออะไรกันแน่? ฉันมีรหัสต่อไปนี้: template <typename T, typename Tail> // Tail will be a UnionNode too. struct UnionNode : public Tail { // ... template<typename U> struct inUnion { // Q: where to add typename/template here? typedef Tail::inUnion<U> dummy; }; template< > struct inUnion<T> { }; }; template <typename T> // …

20
หน่วยความจำของตัวแปรโลคัลสามารถเข้าถึงได้นอกขอบเขตหรือไม่?
ฉันมีรหัสต่อไปนี้ #include <iostream> int * foo() { int a = 5; return &a; } int main() { int* p = foo(); std::cout << *p; *p = 8; std::cout << *p; } และรหัสกำลังทำงานโดยไม่มีข้อยกเว้นรันไทม์! ผลลัพธ์ก็คือ 58 มันจะเป็นอย่างไร หน่วยความจำของตัวแปรโลคัลไม่สามารถเข้าถึงได้นอกฟังก์ชั่นหรือไม่

15
ความแตกต่างระหว่างการสืบทอดส่วนบุคคลสาธารณะและการป้องกัน
ความแตกต่างระหว่างคืออะไรpublic, privateและprotectedมรดกในc ++? คำถามทั้งหมดที่ฉันพบในการจัดการกับกรณีเฉพาะ

1
ฟีเจอร์ใหม่ใน C ++ 17 คืออะไร
ล็อคแล้ว คำถามและคำตอบนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ตอนนี้ C ++ 17 เสร็จสมบูรณ์แล้วดังนั้นจึงไม่น่าจะมีการเปลี่ยนแปลงครั้งใหญ่ มีการเสนอข้อเสนอหลายร้อยรายการสำหรับ C ++ 17 คุณลักษณะใดบ้างที่ถูกเพิ่มลงใน C ++ ใน C ++ 17 เมื่อใช้คอมไพเลอร์ C ++ ที่รองรับ "C ++ 1z" ฟีเจอร์ใดบ้างที่จะใช้งานได้เมื่อคอมไพเลอร์อัพเดตเป็น C ++ 17?
1007 c++  standards  c++-faq  c++17 

5
พฤติกรรมที่ไม่ได้กำหนดและจุดลำดับ
"คะแนนตามลำดับ" คืออะไร? ความสัมพันธ์ระหว่างพฤติกรรมที่ไม่ได้กำหนดและคะแนนตามลำดับคืออะไร? ฉันมักจะใช้การแสดงออกที่ตลกและซับซ้อนเช่นa[++i] = i;ทำให้ฉันรู้สึกดีขึ้น เหตุใดฉันจึงควรหยุดใช้งาน หากคุณได้อ่านบทความนี้ให้แน่ใจว่าจะแวะไปที่ติดตามคำถามไม่ได้กำหนดพฤติกรรมและลำดับจุดโหลดใหม่ (หมายเหตุ: นี่คือหมายถึงการเป็นรายการที่จะกองมากเกินของ C ++ คำถามที่พบบ่อย . ถ้าคุณต้องการที่จะวิจารณ์ความคิดของการให้คำถามที่พบบ่อยในรูปแบบนี้แล้วโพสต์บนเมตาที่เริ่มต้นทั้งหมดนี้ . จะเป็นสถานที่ที่จะทำเช่นนั้นได้คำตอบ คำถามนั้นได้รับการตรวจสอบในห้องสนทนา C ++ซึ่งแนวคิด FAQ เริ่มต้นตั้งแต่แรกดังนั้นคำตอบของคุณมีโอกาสมากที่จะได้รับการอ่านโดยผู้ที่คิดแนวคิดนี้)



23
ทำไมไม่สามารถประกาศตัวแปรในคำสั่ง switch ได้?
ฉันสงสัยอยู่เสมอว่าทำไมคุณไม่สามารถประกาศตัวแปรหลังจากเลเบลเคสในคำสั่ง switch? ใน C ++ คุณสามารถประกาศตัวแปรได้ทุกที่ (และประกาศให้ใกล้เคียงกับการใช้งานครั้งแรกเห็นได้ชัดว่าเป็นสิ่งที่ดี) แต่สิ่งต่อไปนี้ยังคงไม่ทำงาน: switch (val) { case VAL: // This won't work int newVal = 42; break; case ANOTHER_VAL: ... break; } ข้างต้นทำให้ฉันข้อผิดพลาดต่อไปนี้ (MSC): การเริ่มต้นของ 'newVal' ถูกข้ามโดยป้ายกำกับ 'case' นี่เป็นข้อ จำกัด ในภาษาอื่นด้วย ทำไมปัญหานี้ถึงเป็นเช่นนั้น?

5
กฎเกี่ยวกับการใช้ขีดเส้นใต้ในตัวระบุ C ++ คืออะไร
เป็นเรื่องปกติใน C ++ ในการตั้งชื่อตัวแปรสมาชิกด้วยคำนำหน้าบางชนิดเพื่อแสดงความจริงว่าเป็นตัวแปรสมาชิกแทนที่จะเป็นตัวแปรหรือพารามิเตอร์ในตัวเครื่อง หากคุณได้มาจากพื้นหลังเอ็มเอฟ, m_fooคุณอาจจะใช้ ฉันเคยเห็นmyFooบ้างเช่นกัน C # (หรืออาจจะเพียงแค่ .NET) _fooดูเหมือนว่าจะแนะนำให้ใช้เพียงขีดเป็นเช่นเดียวกับใน สิ่งนี้ได้รับอนุญาตจากมาตรฐาน C ++ หรือไม่

7
อะไรคือความแตกต่างระหว่าง 'typedef' และ 'using' ใน C ++ 11?
ฉันรู้ว่าใน C ++ 11 ตอนนี้เราสามารถใช้usingเพื่อเขียนนามแฝงประเภทเช่นtypedefs: typedef int MyInt; คือจากสิ่งที่ฉันเข้าใจเทียบเท่ากับ: using MyInt = int; และไวยากรณ์ใหม่นั้นเกิดขึ้นจากความพยายามที่จะมีวิธีในการแสดงออก " template typedef": template< class T > using MyType = AnotherType< T, MyAllocatorType >; แต่ด้วยสองตัวอย่างแรกที่ไม่ใช่แม่แบบมีความแตกต่างเล็กน้อยอื่น ๆ ในมาตรฐานหรือไม่ ตัวอย่างเช่นใช้typedefนามแฝงด้วยวิธี "อ่อนแอ" นั่นคือมันไม่ได้สร้างประเภทใหม่ แต่มีเพียงชื่อใหม่เท่านั้น (การแปลงนั้นมีนัยยะระหว่างชื่อเหล่านั้น) มันเหมือนกันกับusingหรือสร้างชนิดใหม่หรือไม่ มีความแตกต่างหรือไม่?


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.