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

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

7
C ++, ร้านค้าฟรีเทียบกับฮีป
การจัดสรรแบบไดนามิกที่มีnew/deleteบอกว่าจะใช้สถานที่ในฟรีร้านค้า , ในขณะที่malloc/freeการดำเนินการใช้กอง ฉันต้องการทราบว่าในทางปฏิบัติมีความแตกต่างกันหรือไม่ คอมไพเลอร์สร้างความแตกต่างระหว่างสองคำหรือไม่? ( ร้านค้าฟรีและHeapไม่ใช่new/malloc)

30
มีวิธีง่ายๆในการแปลง C ++ enum เป็นสตริงหรือไม่?
สมมติว่าเรามีชื่อ enums: enum MyEnum { FOO, BAR = 0x50 }; สิ่งที่ฉัน googled คือสคริปต์ (ภาษาใดก็ได้) ที่สแกนส่วนหัวทั้งหมดในโปรเจ็กต์ของฉันและสร้างส่วนหัวด้วยหนึ่งฟังก์ชันต่อ enum char* enum_to_string(MyEnum t); และการใช้งานกับสิ่งนี้: char* enum_to_string(MyEnum t){ switch(t){ case FOO: return "FOO"; case BAR: return "BAR"; default: return "INVALID ENUM"; } } gotcha นั้นมาพร้อมกับ enums typedefed และ enums สไตล์ C ที่ไม่มีชื่อ มีใครรู้เรื่องนี้บ้างไหม? แก้ไข: โซลูชันไม่ควรแก้ไขแหล่งที่มาของฉันยกเว้นฟังก์ชันที่สร้างขึ้น …
123 c++  string  enums  scripting 

13
ความท้าทายด้านประสิทธิภาพ C ++: จำนวนเต็มเป็น std :: การแปลงสตริง
ใครสามารถเอาชนะประสิทธิภาพของจำนวนเต็มของฉันเป็น std :: string code ที่ลิงก์ด้านล่างนี้ได้ไหม มีคำถามหลายข้อที่อธิบายวิธีการแปลงจำนวนเต็มเป็นstd::stringC ++ เช่นคำถามนี้แต่ไม่มีวิธีใดที่มีประสิทธิภาพ นี่คือโค้ดที่พร้อมสำหรับการคอมไพล์สำหรับวิธีการทั่วไปในการแข่งขันกับ: "วิธี C ++" โดยใช้ stringstream: http://ideone.com/jh3Sa sprintf ซึ่ง SO-ers มักจะแนะนำให้คำนึงถึงประสิทธิภาพ: http://ideone.com/82kwR ขัดกับความเชื่อที่นิยม , boost::lexical_castมีการดำเนินการของตัวเอง ( กระดาษสีขาว ) และไม่ได้ใช้stringstreamและผู้ประกอบการแทรกตัวเลข ฉันจริงๆต้องการเพื่อดูประสิทธิภาพของมันเมื่อเทียบเพราะคำถามอื่น ๆ นี้แสดงให้เห็นว่ามันเป็นความสุข และการมีส่วนร่วมของฉันเองซึ่งสามารถแข่งขันได้บนคอมพิวเตอร์เดสก์ท็อปและแสดงให้เห็นถึงแนวทางที่ทำงานด้วยความเร็วสูงสุดบนระบบฝังตัวเช่นกันซึ่งแตกต่างจากอัลกอริทึมที่ขึ้นอยู่กับโมดูโลจำนวนเต็ม: อัลกอริทึมของ Ben: http://ideone.com/SsEUW หากคุณต้องการใช้รหัสนั้นฉันจะทำให้พร้อมใช้งานภายใต้ใบอนุญาต BSD แบบง่าย (อนุญาตให้ใช้ในเชิงพาณิชย์ต้องแสดงที่มา) แค่ถาม. สุดท้ายฟังก์ชั่นltoaไม่ได้มาตรฐาน แต่มีให้ใช้งานทั่วไป ltoa version สำหรับใครก็ตามที่มีคอมไพเลอร์ที่ให้มา (ideone ไม่มี): http://ideone.com/T5Wim ฉันจะโพสต์การวัดประสิทธิภาพของฉันเป็นคำตอบในไม่ช้า กฎสำหรับอัลกอริทึม …

14
ฉันควรใช้ตัวระบุข้อยกเว้นใน C ++ หรือไม่
ใน C ++ คุณสามารถระบุว่าฟังก์ชันอาจมีหรือไม่มีข้อยกเว้นโดยใช้ตัวระบุข้อยกเว้น ตัวอย่างเช่น: void foo() throw(); // guaranteed not to throw an exception void bar() throw(int); // may throw an exception of type int void baz() throw(...); // may throw an exception of some unspecified type ฉันสงสัยเกี่ยวกับการใช้งานจริงเนื่องจากสิ่งต่อไปนี้: คอมไพเลอร์ไม่ได้บังคับใช้ตัวระบุข้อยกเว้นอย่างเข้มงวด แต่อย่างใดดังนั้นประโยชน์จึงไม่มาก ตามหลักการแล้วคุณต้องการรับข้อผิดพลาดในการคอมไพล์ หากฟังก์ชันละเมิดตัวระบุข้อยกเว้นฉันคิดว่าพฤติกรรมมาตรฐานคือการยุติโปรแกรม ใน VS.Net ถือว่าการโยน (X) เป็นการโยน (... ) …

10
ฉันจะรับค่าสูงสุด (หรือต่ำสุด) ในเวกเตอร์ได้อย่างไร
ฉันจะรับค่าสูงสุด (หรือต่ำสุด) ในเวกเตอร์ในC ++ ได้อย่างไร ฉันได้เห็นวิธีแก้ปัญหาบางอย่างสำหรับสิ่งนี้ใน Google แต่ไม่มีวิธีใดที่เหมาะสมสำหรับฉัน :( ใครช่วยอธิบายวิธีการหาค่าสูงสุดหรือต่ำสุดจากเวกเตอร์ให้เข้าใจง่าย ๆ หน่อยได้ไหม และฉันคิดผิดที่คิดว่าอาร์เรย์จะเหมือนกันมากหรือน้อย? ฉันต้องการตัววนซ้ำใช่ไหม ฉันลองแล้วmax_elementแต่ยังคงได้รับข้อผิดพลาด? vector<int>::const_iterator it; it = max_element(cloud.begin(), cloud.end()); ข้อผิดพลาด: ขอสมาชิก 'เริ่มต้น' ใน 'คลาวด์' ซึ่งเป็นประเภทที่ไม่ใช่คลาส 'int [10]' แก้ไข:ยังตอบไม่ได้ ??? ฉันจะวางไว้ที่นี่ ... ว้าวขอบคุณสำหรับการตอบกลับที่รวดเร็ว! ฉันลงเอยด้วยวิธีนี้คิดว่ามันโอเคไหม? for (unsigned int i = 0; i < cdf.size(); i++) if (cdf[i] < cdfMin) cdfMin …
123 c++  vector  max  min 

9
ฉันจะหาคำจำกัดความของ size_t ได้ที่ไหน
ฉันเห็นตัวแปรที่กำหนดด้วยประเภทนี้ แต่ฉันไม่รู้ว่ามันมาจากไหนหรือจุดประสงค์ของมันคืออะไร ทำไมไม่ใช้ int หรือไม่ได้ลงนาม int? (ประเภทที่ "คล้ายกัน" อื่น ๆ ล่ะ void_t ฯลฯ )
123 c++  c  variables 

11
ข้อดีของการใช้ไลบรารี C ++ Boost คืออะไร? [ปิด]
ตามที่กล่าวไว้ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ดังนั้นฉันได้อ่านและดูเหมือนว่าไลบรารี Boost จะถูกใช้บ่อยมากในทางปฏิบัติ (ไม่ใช่ที่ร้านของฉัน) ทำไมถึงเป็นแบบนี้? และอะไรที่ทำให้มันยอดเยี่ยมมาก?
123 c++  boost 

7
ทำไมไม่ std :: que :: pop return value.?
ฉันอ่านหน้านี้แต่ฉันไม่สามารถหาเหตุผลเดียวกันได้ มีการกล่าวถึงว่า "มันสมเหตุสมผลกว่าที่จะไม่ส่งคืนค่าใด ๆ เลยและต้องการให้ไคลเอ็นต์ใช้ front () เพื่อตรวจสอบค่าที่ด้านหน้าของคิว" แต่การตรวจสอบองค์ประกอบจาก front () จำเป็นต้องคัดลอกองค์ประกอบนั้นด้วยค่า lvalue ตัวอย่างเช่นในส่วนรหัสนี้ std::queue<int> myqueue; int myint; int result; std::cin >> myint; myqueue.push (myint); / * ที่นี่ชั่วคราวจะถูกสร้างขึ้นบน RHS ซึ่งจะถูกกำหนดให้กับผลลัพธ์และในกรณีที่หากส่งคืนโดยการอ้างอิงผลลัพธ์จะถูกแสดงผลไม่ถูกต้องหลังจากการดำเนินการป๊อป * / result = myqueue.front(); //result. std::cout << ' ' << result; myqueue.pop(); บนวัตถุcoutบรรทัดที่ห้าก่อนสร้างสำเนา myqueue.front () จากนั้นกำหนดให้เป็นผลลัพธ์ ดังนั้นความแตกต่างคืออะไรฟังก์ชันป๊อปสามารถทำสิ่งเดียวกันได้
123 c++  stl 

4
องค์กรโครงการ C ++ (พร้อม gtest, cmake และ doxygen)
ฉันยังใหม่กับการเขียนโปรแกรมโดยทั่วไปดังนั้นฉันจึงตัดสินใจว่าจะเริ่มต้นด้วยการสร้างคลาสเวกเตอร์อย่างง่ายใน C ++ อย่างไรก็ตามฉันต้องการสร้างนิสัยที่ดีตั้งแต่เริ่มต้นแทนที่จะพยายามแก้ไขขั้นตอนการทำงานของฉันในภายหลัง ขณะนี้ฉันมีเพียงสองไฟล์vector3.hppและvector3.cpp. โครงการนี้จะเริ่มเติบโตอย่างช้าๆ (ทำให้เป็นไลบรารีพีชคณิตเชิงเส้นทั่วไปมากขึ้น) เมื่อฉันคุ้นเคยกับทุกสิ่งมากขึ้นฉันจึงต้องการใช้เค้าโครงโครงการ "มาตรฐาน" เพื่อทำให้ชีวิตง่ายขึ้นในภายหลัง หลังจากมองไปรอบ ๆ ฉันได้พบสองวิธีในการจัดระเบียบไฟล์ hpp และ cpp วิธีแรก: project └── src ├── vector3.hpp └── vector3.cpp และสิ่งที่สอง: project ├── inc │ └── project │ └── vector3.hpp └── src └── vector3.cpp คุณจะแนะนำตัวไหนและเพราะอะไร ประการที่สองฉันต้องการใช้ Google C ++ Testing Framework สำหรับการทดสอบหน่วยของฉันเนื่องจากดูเหมือนว่าจะใช้งานง่าย คุณแนะนำให้รวมสิ่งนี้เข้ากับรหัสของฉันเช่นในinc/gtestหรือcontrib/gtestโฟลเดอร์หรือไม่ หากรวมกลุ่มคุณแนะนำให้ใช้fuse_gtest_files.pyสคริปต์เพื่อลดจำนวนหรือไฟล์หรือปล่อยให้เป็น หากไม่ได้รวมการพึ่งพานี้จะจัดการอย่างไร เมื่อพูดถึงการทดสอบการเขียนโดยทั่วไปมีการจัดระเบียบอย่างไร? …
123 c++  cmake  doxygen  googletest 


10
คุณคัดลอกเนื้อหาของอาร์เรย์ไปยัง std :: vector ใน C ++ โดยไม่ต้องวนซ้ำได้อย่างไร
ฉันมีอาร์เรย์ของค่าที่ส่งผ่านไปยังฟังก์ชันของฉันจากส่วนอื่นของโปรแกรมที่ฉันต้องการเก็บไว้เพื่อประมวลผลในภายหลัง เนื่องจากฉันไม่รู้ว่าฟังก์ชันของฉันจะถูกเรียกกี่ครั้งก่อนถึงเวลาประมวลผลข้อมูลฉันจึงต้องการโครงสร้างการจัดเก็บแบบไดนามิกดังนั้นฉันจึงเลือกไฟล์std::vector. ฉันไม่ต้องการให้มีการทำวงมาตรฐานค่าทั้งหมดเป็นรายบุคคลก็จะดีถ้าฉันสามารถคัดลอกทั้งหมดโดยใช้สิ่งที่คล้ายกับpush_backmemcpy
123 c++  stl  vector  copy 

7
ใช้ C ++ กับโกโก้แทน Objective-C หรือไม่?
ฉันต้องการเขียนแอปพลิเคชันที่ใช้ C ++ และ Cocoa frameworks เนื่องจาก Apple ไม่ได้ทำให้ Carbon 64-bit มีความสามารถ C ++ ดูเหมือนจะเป็นวานิลลาในการใช้งานบน Linux และ Windows แต่ใน MacOS X ดูเหมือนว่าจำเป็นต้องมีโค้ดเฉพาะของ Apple เพิ่มเติม (เช่นกระดาษห่อหุ้ม Obj-C) ดูเหมือนว่า Apple กำลังบังคับให้นักพัฒนาเขียนใน Objective-C แทนที่จะเป็น C ++ แม้ว่าฉันจะผิด ฉันกำลังพยายามหาเส้นทางในการเขียนโค้ดบน Mac ที่จะทำให้ข้ามแพลตฟอร์มได้ง่าย การเขียนโค้ดใน C ++ สำหรับ Linux / Windows แล้วเขียนซ้ำส่วนใหญ่ใน Objective-C จะไม่มีประสิทธิภาพมาก มีวิธีการเขียนโค้ดใน C ++ …

3
การใช้ตัวชี้นี้ทำให้เกิดการลดประสิทธิภาพแบบแปลก ๆ ใน hot loop
ฉันเพิ่งเจอการลดประสิทธิภาพแบบแปลก ๆ (หรือค่อนข้างพลาดโอกาสในการเพิ่มประสิทธิภาพ) พิจารณาฟังก์ชันนี้เพื่อการคลายอาร์เรย์ของจำนวนเต็ม 3 บิตเป็นจำนวนเต็ม 8 บิตอย่างมีประสิทธิภาพ มันคลาย 16 ints ในการวนซ้ำแต่ละครั้ง: void unpack3bit(uint8_t* target, char* source, int size) { while(size > 0){ uint64_t t = *reinterpret_cast<uint64_t*>(source); target[0] = t & 0x7; target[1] = (t >> 3) & 0x7; target[2] = (t >> 6) & 0x7; target[3] = (t >> …

9
ฉันจะส่งผ่านฟังก์ชันสมาชิกที่คาดว่าจะมีฟังก์ชันฟรีได้อย่างไร
คำถามมีดังต่อไปนี้: พิจารณาโค้ดส่วนนี้: #include <iostream> class aClass { public: void aTest(int a, int b) { printf("%d + %d = %d", a, b, a + b); } }; void function1(void (*function)(int, int)) { function(1, 1); } void test(int a,int b) { printf("%d - %d = %d", a , b , a - …

5
แฟล็กเพื่อเปิดใช้งานคำเตือน g ++ อย่างละเอียดและละเอียด
บ่อยครั้งใน C ภายใต้gccฉันจะเริ่มต้นด้วยชุดคำเตือนต่อไปนี้ (ประกอบอย่างเจ็บปวดจากหลายแหล่ง): -Wall -Wextra -Wformat-nonliteral -Wcast-align -Wpointer-arith -Wbad-function-cast \ -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -Winline -Wundef \ -Wnested-externs -Wcast-qual -Wshadow -Wwrite-strings -Wno-unused-parameter \ -Wfloat-equal -pedantic -ansi ฉันจะสร้าง (อย่างน้อยเวอร์ชันดีบักของฉัน) ด้วยชุดคำเตือนนี้และแก้ไขทุกสิ่งที่ทำได้ (โดยปกติคือทุกอย่าง) จากนั้นจะลบแฟล็กเฉพาะในกรณีที่ไม่เกี่ยวข้องหรือไม่สามารถแก้ไขได้ (แทบจะไม่เคยเป็นเช่นนั้นเลย) บางครั้งฉันจะเพิ่ม-Werrorด้วยว่าฉันต้องถอยห่างออกไปขณะรวบรวม ฉันแค่หยิบ C ++ ขึ้นมา (ใช่ฉันล้าหลังกว่า 15 ปี) และฉันต้องการเริ่มต้นอย่างถูกต้อง คำถามของฉันคือใครมีชุดคำเตือนที่สมบูรณ์ที่คล้ายกันที่คอมไพล์ไว้ล่วงหน้าสำหรับ C ++ ภายใต้g++หรือไม่? (ฉันรู้ว่าพวกเขาหลายคนจะเหมือนกัน)
122 c++  g++  warnings 

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