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

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

22
ภาษาแอสเซมบลีแบบอินไลน์ช้ากว่ารหัสภาษา C ++ หรือไม่
ฉันพยายามเปรียบเทียบประสิทธิภาพของภาษาแอสเซมบลีแบบอินไลน์และรหัส C ++ ดังนั้นฉันจึงเขียนฟังก์ชั่นที่เพิ่มขนาด 2,000 อาร์เรย์สองอาร์เรย์เป็น 100,000 ครั้ง นี่คือรหัส: #define TIMES 100000 void calcuC(int *x,int *y,int length) { for(int i = 0; i < TIMES; i++) { for(int j = 0; j < length; j++) x[j] += y[j]; } } void calcuAsm(int *x,int *y,int lengthOfArray) { __asm { mov edi,TIMES …
183 c++  c  performance  assembly 

9
ทำไมคุณใช้ typedef เมื่อประกาศ enum ใน C ++
ฉันยังไม่ได้เขียน C ++ ในเวลาหลายปีและตอนนี้ฉันกำลังพยายามกลับเข้าไป จากนั้นฉันก็วิ่งข้ามสิ่งนี้และคิดเกี่ยวกับการยอมแพ้: typedef enum TokenType { blah1 = 0x00000000, blah2 = 0X01000000, blah3 = 0X02000000 } TokenType; นี่คืออะไร? เหตุใดจึงtypedefใช้คำหลักที่นี่ เหตุใดชื่อจึงTokenTypeปรากฏขึ้นสองครั้งในการประกาศนี้ ความหมายต่างจากนี้อย่างไร enum TokenType { blah1 = 0x00000000, blah2=0x01000000, blah3=0x02000000 };
183 c++  enums  typedef 

2
เหตุใดตัวชี้ 'this' จึงไม่ใช่ตัวอ้างอิง
ฉันกำลังอ่านคำตอบสำหรับคำถามนี้ข้อดีและข้อเสีย C ++และมีข้อสงสัยนี้ในขณะที่อ่านความคิดเห็น โปรแกรมเมอร์มักพบว่าสับสนว่า "นี่" เป็นตัวชี้ แต่ไม่ใช่การอ้างอิง ความสับสนอีกอย่างคือทำไม "hello" ไม่ใช่ type std :: string แต่ประเมินเป็น char const * (ตัวชี้) (หลังจากการแปลงอาเรย์เป็นตัวชี้) - Johannes Schaub - litb 22 ธันวาคม 2008 เวลา 1:56 นั่นแสดงให้เห็นว่ามันไม่ได้ใช้แบบแผนเดียวกับภาษาอื่น ๆ (ในภายหลัง) - เลอ dorfier 22 ธันวาคม '08 ที่ 3:35 ฉันจะเรียกสิ่งนี้ว่า "ปัญหาเล็กน้อย" และอุ๊ปส์ขอบคุณสำหรับการจับข้อผิดพลาดเล็กน้อยในตัวอย่างของพฤติกรรมที่ไม่ได้กำหนด :) ถึงแม้ว่าฉันไม่เข้าใจว่าข้อมูลเกี่ยวกับขนาดเกี่ยวข้องกับอะไรในข้อมูลแรก ตัวชี้ไม่ได้รับอนุญาตให้ชี้ออกไปนอกหน่วยความจำที่จัดสรร - วันที่ 22 …

5
Unicode รองรับได้ดีแค่ไหนใน C ++ 11?
ฉันอ่านแล้วได้ยินว่า C ++ 11 รองรับ Unicode คำถามสองสามข้อเกี่ยวกับเรื่องนี้: ไลบรารีมาตรฐาน C ++ รองรับ Unicode ได้ดีแค่ไหน ไม่std::stringทำในสิ่งที่ควร? ฉันจะใช้มันได้อย่างไร ปัญหาที่อาจเกิดขึ้นอยู่ที่ไหน
183 c++  unicode  c++11 

12
มีการจำกัดความยาวสูงสุดของอาร์เรย์ใน C ++ หรือไม่
มีความยาวสูงสุดสำหรับอาร์เรย์ใน C ++ หรือไม่ มันเป็นขีด จำกัด ของ C ++ หรือขึ้นอยู่กับเครื่องของฉันด้วย? มันปรับเปลี่ยนได้หรือไม่? มันขึ้นอยู่กับชนิดของอาร์เรย์ที่ทำหรือไม่? ฉันสามารถทำลายขีด จำกัด นั้นหรือฉันต้องค้นหาวิธีที่ดีกว่าในการจัดเก็บข้อมูลได้หรือไม่? และสิ่งที่ควรเป็นวิธีที่ง่ายที่สุด? สิ่งที่ฉันต้องทำก็คือการเก็บ int ไว้ในอาร์เรย์มานานฉันทำงานในระบบ Linux คำถามของฉันคือฉันต้องทำอย่างไรถ้าฉันต้องการเก็บอาเรย์ของจำนวนเต็มความยาว N ที่มี N> 10 หลัก ฉันต้องการสิ่งนี้เพราะฉันกำลังเขียนอัลกอริทึมการเข้ารหัสลับ (เช่น p-Pollard) สำหรับโรงเรียนและเข้าชมกำแพงของจำนวนเต็มและความยาวของการเป็นตัวแทนอาร์เรย์
183 c++  arrays 

6
คำหลัก จำกัด หมายถึงอะไรใน C ++
ฉันไม่แน่ใจอยู่เสมอคำหลักจำกัดความหมายใน C ++ คืออะไร หมายความว่าตัวชี้ตั้งแต่สองตัวขึ้นไปที่กำหนดให้กับฟังก์ชันไม่ทับซ้อนกันหรือไม่ มันหมายความว่าอะไร?

11
วิธีการโทรลบด้วยตัววนซ้ำย้อนกลับ
ฉันพยายามทำสิ่งนี้: for ( std::list< Cursor::Enum >::reverse_iterator i = m_CursorStack.rbegin(); i != m_CursorStack.rend(); ++i ) { if ( *i == pCursor ) { m_CursorStack.erase( i ); break; } } อย่างไรก็ตามการลบจะใช้ตัววนซ้ำและไม่ใช่ตัววนซ้ำแบบย้อนกลับ มีวิธีในการแปลง reverse iterator เป็น iterator ปกติหรือวิธีอื่นในการลบองค์ประกอบนี้จากรายการ?
181 c++ 

25
สัญลักษณ์ภายนอกที่ไม่ได้รับการแก้ไขในไฟล์วัตถุ
ระหว่างการเข้ารหัสใน Visual Studio ฉันพบข้อผิดพลาดของสัญลักษณ์ภายนอกที่ไม่ได้รับการแก้ไขและฉันไม่รู้ว่าจะทำอย่างไร ฉันไม่รู้ว่ามีอะไรผิดปกติ คุณช่วยถอดรหัสฉันหน่อยได้ไหม ฉันควรหาข้อผิดพลาดประเภทใด 1>Form.obj : error LNK2019: unresolved external symbol "public: class Field * __thiscall Field::addField(class Field *)" (?addField@Field@@QAEPAV1@PAV1@@Z) referenced in function "public: void __thiscall Form::parse(class std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> > &)" (?parse@Form@@QAEXAAV?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 1>Form.obj : error LNK2019: unresolved external symbol "public: virtual void __thiscall Field::parse(class std::basic_stringstream<char,struct std::char_traits<char>,class …

19
จะค้นหาหน่วยความจำรั่วในรหัส C ++ ได้อย่างไร
ฉันเป็นโปรแกรมเมอร์ C ++ บนแพลตฟอร์ม Windows ฉันใช้ Visual Studio 2008 ฉันมักจะจบลงในรหัสด้วยหน่วยความจำรั่ว โดยปกติฉันพบว่าหน่วยความจำรั่วโดยตรวจสอบรหัส แต่มันยุ่งยากและไม่ได้เป็นวิธีที่ดีเสมอไป เนื่องจากฉันไม่สามารถจ่ายเครื่องมือตรวจจับการรั่วไหลของหน่วยความจำแบบจ่ายเงินได้ฉันต้องการให้พวกคุณแนะนำวิธีที่ดีที่สุดในการหลีกเลี่ยงการรั่วไหลของหน่วยความจำ ฉันต้องการทราบว่าโปรแกรมเมอร์สามารถค้นหาหน่วยความจำรั่วได้อย่างไร มีมาตรฐานหรือขั้นตอนใดที่ควรปฏิบัติตามเพื่อให้แน่ใจว่าไม่มีการรั่วไหลของหน่วยความจำในโปรแกรมหรือไม่?
180 c++  memory-leaks 

16
ตัวแปรสแตติกเก็บไว้ที่ไหนใน C และ C ++
ในส่วนใด (.BSS, .DATA, อื่น ๆ ) ของไฟล์ที่เรียกใช้งานเป็นตัวแปรสแตติกที่เก็บไว้เพื่อไม่ให้มีการชนกันของชื่อ? ตัวอย่างเช่น: foo.c: bar.c: static int foo = 1; static int foo = 10; void fooTest() { void barTest() { static int bar = 2; static int bar = 20; foo++; foo++; bar++; bar++; printf("%d,%d", foo, bar); printf("%d, %d", foo, bar); } } หากฉันรวบรวมทั้งไฟล์และเชื่อมโยงไปยังไฟล์หลักที่เรียกใช้ …

4
จะเกิดอะไรขึ้นเมื่อโปรแกรมคอมพิวเตอร์ทำงาน
ฉันรู้ทฤษฎีทั่วไป แต่ไม่สามารถอธิบายรายละเอียดได้ ฉันรู้ว่าโปรแกรมอยู่ในหน่วยความจำรองของคอมพิวเตอร์ เมื่อโปรแกรมเริ่มการทำงานมันจะถูกคัดลอกไปยัง RAM ทั้งหมด จากนั้นตัวประมวลผลจะดึงคำแนะนำสองสามครั้ง (ขึ้นอยู่กับขนาดของบัส) ในแต่ละครั้งทำให้พวกเขาลงทะเบียนและดำเนินการได้ ฉันยังรู้ว่าโปรแกรมคอมพิวเตอร์ใช้หน่วยความจำสองชนิด: stack และ heap ซึ่งเป็นส่วนหนึ่งของหน่วยความจำหลักของคอมพิวเตอร์ สแต็กใช้สำหรับหน่วยความจำที่ไม่ไดนามิกและฮีปสำหรับหน่วยความจำแบบไดนามิก (ตัวอย่างเช่นทุกอย่างที่เกี่ยวข้องกับnewโอเปอเรเตอร์ใน C ++) สิ่งที่ฉันไม่เข้าใจคือสิ่งที่ทั้งสองเชื่อมต่อกัน สแต็คใช้ในการดำเนินการตามคำแนะนำ ณ จุดใด คำแนะนำจาก RAM ไปจนถึงสแต็คไปยังรีจิสเตอร์?


18
ฉันจะสร้างสตริงตัวอักษรและตัวเลขแบบสุ่มใน C ++ ได้อย่างไร
ฉันต้องการสร้างสตริงแบบสุ่มซึ่งประกอบด้วยตัวอักษรและตัวเลข ฉันต้องการที่จะสามารถระบุความยาวของสตริง ฉันจะทำสิ่งนี้ใน C ++ ได้อย่างไร
180 c++  string  random 


2
สำนวน safe-bool ล้าสมัยใน C ++ 11 หรือไม่
คำตอบของ @R นี้ Martinho Fernandesแสดงให้เห็นว่าสำนวน safe-bool นั้นถูกคัดค้านอย่างชัดเจนใน C ++ 11 เนื่องจากมันสามารถแทนที่ได้โดยง่าย explicit operator bool() const; ตามคำพูดมาตรฐานในคำตอบ§4 [conv] p3: นิพจน์ e สามารถแปลงเป็นประเภทโดยปริยายTหากการประกาศT t=e;นั้นมีรูปแบบที่ดีสำหรับตัวแปรชั่วคราวที่ประดิษฐ์ขึ้นมาบางส่วนt(§8.5) โครงสร้างภาษาบางภาษาต้องการให้นิพจน์ถูกแปลงเป็นค่าบูลีน การแสดงออกeที่ปรากฏในบริบทดังกล่าวกล่าวคือจะต้องแปลงบริบทการboolและเป็นรูปแบบที่ดีและถ้าหากการประกาศbool t(e);เป็นรูปแบบที่ดีสำหรับบางคนคิดค้นตัวแปรเสื้อชั่วคราว (§8.5) ส่วนที่ไฮไลต์จะแสดงให้เห็นอย่างชัดเจนว่า "การส่งแบบชัดเจนโดยนัย" (เรียกว่า "การแปลงตามบริบท" ในมาตรฐาน) เป็น @R Martinho วางไว้ "การสร้างภาษาบางอย่าง" ที่ต้องการให้ "cast ชัดแจ้งชัดเจน" ดูเหมือนจะดังต่อไปนี้: if, while, for( §6.4 [stmt.select] p4) ตัวดำเนินการเชิงตรรกะแบบไบนารี&&และ||( §5.14 [expr.log.and/or] p1สำหรับทั้งคู่) …

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