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

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

2
ทำไมตัวอักษรถึงแบ่งออกเป็นหลายช่วงในรหัส C นี้
ในห้องสมุดที่กำหนดเองฉันเห็นการใช้งาน: inline int is_upper_alpha(char chValue) { if (((chValue >= 'A') && (chValue <= 'I')) || ((chValue >= 'J') && (chValue <= 'R')) || ((chValue >= 'S') && (chValue <= 'Z'))) return 1; return 0; } นั่นคือไข่อีสเตอร์หรืออะไรคือข้อดีกับวิธี C / C ++ มาตรฐาน? inline int is_upper_alpha(char chValue) { return ((chValue >= 'A') …
161 c++  c  character  toupper 

19
มีเครื่องมือการรีแฟคเตอร์ C ++ ที่ใช้งานได้หรือไม่ [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน6 เดือนที่ผ่านมา ปรับปรุงคำถามนี้ ไม่มีใครรู้ว่าเครื่องมือ refactoring ที่โดดเด่นอย่างสมบูรณ์สำหรับ C ++ ที่ทำงานได้อย่างน่าเชื่อถือกับฐานรหัสขนาดใหญ่ (ประมาณ 100,000 บรรทัด) ฉันลองอะไรก็ได้ที่ฉันสามารถหาได้ซ้ำแล้วซ้ำอีกในช่วงหลายปีที่ผ่านมา: SlickEdit, Eclipse CDT พวกเขาทั้งหมดไม่สามารถใช้งานได้เลย สรุป : ฉันใช้เวลาและประเมินผล "Visual Assist X" เช่นเดียวกับ "Refactor for C ++" ทั้งคู่มีคุณสมบัติที่น่าประทับใจ แต่ทั้งคู่ก็ยังห่างไกลจากความสมบูรณ์แบบ การแยกรหัสขนาดใหญ่มักไม่ได้รับการแก้ไขหากไม่มีการแก้ไขด้วยตนเอง - ดังนั้นจึงไม่ได้ผล "Visual Assist X" มีคุณสมบัติที่ดีเช่นการเติมข้อความอัตโนมัติที่สมบูรณ์มากขึ้น ฯลฯ แต่มันนำไปสู่การกะพริบมากและช้าลงมากในบางจุด โดยความเห็นของฉันดังนั้นคำตอบคือ: "ไม่ไม่มีเครื่องมือการเตรียมการผลิตใหม่สำหรับ C ++" …
161 c++  refactoring 

11
ทำไมคอนสตรัคเตอร์แบบไร้พารามิเตอร์เริ่มหายไปเมื่อคุณสร้างด้วยพารามิเตอร์
ใน C #, C ++ และ Java เมื่อคุณสร้างคอนสตรัคเตอร์ที่รับพารามิเตอร์พารามิเตอร์ไร้ค่าเริ่มต้นจะหายไป ฉันยอมรับข้อเท็จจริงนี้มาโดยตลอด แต่ตอนนี้ฉันเริ่มสงสัยแล้วว่าทำไม อะไรคือสาเหตุของพฤติกรรมนี้? มันเป็นเพียงแค่ "มาตรการความปลอดภัย / คาดเดา" การพูดว่า "ถ้าคุณสร้างคอนสตรัคเตอร์ของคุณเองคุณอาจไม่ต้องการให้สิ่งนี้แฝงตัว" หรือมีเหตุผลทางเทคนิคที่ทำให้คอมไพเลอร์ไม่สามารถเพิ่มได้เมื่อคุณสร้าง Constructor ด้วยตัวเอง?

7
std :: function vs template
ขอบคุณ C ++ 11 ที่เราได้รับการstd::functionห่อหุ้มของ functor น่าเสียดายที่ฉันได้ยิน แต่เรื่องเลวร้ายเกี่ยวกับการเพิ่มสิ่งใหม่เหล่านี้เท่านั้น ความนิยมมากที่สุดคือพวกเขาช้าอย่างน่ากลัว ฉันทดสอบมันและพวกเขาดูดอย่างแท้จริงเมื่อเปรียบเทียบกับแม่แบบ #include <iostream> #include <functional> #include <string> #include <chrono> template <typename F> float calc1(F f) { return -1.0f * f(3.3f) + 666.0f; } float calc2(std::function<float(float)> f) { return -1.0f * f(3.3f) + 666.0f; } int main() { using namespace std::chrono; const …

5
ทำไมเราต้องมีความต้องการ?
หนึ่งในมุมของ C ++ 20 requires requiresแนวคิดก็คือว่ามีบางสถานการณ์ที่คุณต้องเขียน ตัวอย่างเช่นตัวอย่างนี้จาก[expr.prim.req] / 3 : ต้องแสดงออกนอกจากนี้ยังสามารถนำมาใช้ในต้องมีข้อ ([ชั่วคราว]) เป็นวิธีการเขียนโฆษณา จำกัด เฉพาะกิจข้อโต้แย้งแม่แบบดังกล่าวเป็นหนึ่งด้านล่าง: template<typename T> requires requires (T x) { x + x; } T add(T a, T b) { return a + b; } เป็นครั้งแรกที่ต้องเปิดต้องใช้ข้อและแนะนำที่สองต้องแสดงออก เหตุผลทางเทคนิคที่อยู่เบื้องหลังrequiresคำหลักที่ต้องการนั้นคืออะไร ทำไมเราไม่อนุญาตให้เขียน: template<typename T> requires (T x) { x + x; } …
161 c++  c++-concepts  c++20 

3
ความแตกต่างระหว่าง std :: move และ std :: forward
ฉันเห็นสิ่งนี้ที่นี่: Move Constructor โทรหา Move Constructor ระดับฐาน มีคนอธิบายได้ไหม: ความแตกต่างระหว่างstd::moveและstd::forwardโดยเฉพาะอย่างยิ่งกับตัวอย่างรหัสบางอย่าง? วิธีคิดเกี่ยวกับมันง่าย ๆ และเมื่อใดควรใช้แบบไหน

9
Stack, Static และ Heap ใน C ++
ฉันค้นหาแล้ว แต่ฉันไม่เข้าใจแนวคิดทั้งสามนี้เป็นอย่างดี ฉันต้องใช้การจัดสรรแบบไดนามิกเมื่อใด (ในฮีป) และประโยชน์ที่แท้จริงของมันคืออะไร ปัญหาของการเกิดไฟฟ้าสถิตย์และกองซ้อนคืออะไร? ฉันสามารถเขียนแอปพลิเคชันทั้งหมดโดยไม่จัดสรรตัวแปรในฮีปได้ไหม ฉันได้ยินมาว่าภาษาอื่น ๆ รวม "ผู้รวบรวมขยะ" ดังนั้นคุณไม่ต้องกังวลเกี่ยวกับความทรงจำ ที่เก็บขยะทำอะไร? คุณสามารถจัดการกับหน่วยความจำด้วยตัวเองได้อย่างไรโดยที่คุณไม่สามารถใช้ตัวเก็บขยะนี้ได้ เมื่อมีคนพูดกับฉันว่าด้วยการประกาศนี้: int * asafe=new int; ฉันมี "ตัวชี้ไปยังตัวชี้" มันหมายความว่าอะไร? มันแตกต่างจาก: asafe=new int; ?

3
วิธีรับ std :: vector pointer ไปยังข้อมูลดิบ?
ฉันพยายามที่จะใช้std::vectorเป็นcharอาร์เรย์ ฟังก์ชั่นของฉันใช้เป็นตัวชี้โมฆะ: void process_data(const void *data); ก่อนที่ฉันจะใช้รหัสนี้: char something[] = "my data here"; process_data(something); ซึ่งทำงานได้ตามที่คาดหวัง แต่ตอนนี้ฉันต้องการพลังของstd::vectorฉันจึงลองใช้รหัสนี้แทน: vector<char> something; *cut* process_data(something); คำถามคือฉันจะส่ง char vector ไปยังฟังก์ชันของฉันได้อย่างไรเพื่อให้ฉันสามารถเข้าถึงข้อมูล raw ของเวกเตอร์ได้ (ไม่ว่าจะเป็นรูปแบบใด - float ฯลฯ ) ฉันลองสิ่งนี้: process_data(&something); และนี่: process_data(&something.begin()); warning C4238: nonstandard extension used : class rvalue used as lvalueแต่มันกลับชี้ไปยังข้อมูลที่ไม่มีความหมายและหลังให้คำเตือน:
160 c++  stl  vector 

3
การรับประกันความซับซ้อนของคอนเทนเนอร์มาตรฐานคืออะไร?
เห็นได้ชัดว่า ;-) ภาชนะมาตรฐานมีรูปแบบการรับประกันบางส่วน การค้ำประกันประเภทใดและความแตกต่างระหว่างภาชนะประเภทต่างๆแตกต่างกันอย่างไร ทำงานจากหน้า SGI (เกี่ยวกับSTL ) ฉันมาด้วยสิ่งนี้: Container Types: ================ Container: Forward Container Reverse Container Random Access Container Sequence Front Insert Sequence Back Insert Sequence Associative Container Simple Associative Container Pair Associative Container Sorted Associative Container Multiple Associative Container Container Types mapped to Standard Containers ============================================= std::vector: Sequence …
160 c++  stl  containers  big-o 

14
วิธีจับภาพหน้าจอที่เร็วที่สุดบน Windows
ฉันต้องการเขียนโปรแกรม screencasting สำหรับแพลตฟอร์ม Windows แต่ไม่แน่ใจว่าจะจับภาพหน้าจอได้อย่างไร วิธีเดียวที่ฉันรู้คือใช้ GDI แต่ฉันอยากรู้ว่ามีวิธีอื่นที่จะไปเกี่ยวกับเรื่องนี้หรือไม่และถ้ามีมีสิ่งใดที่เกิดขึ้นอย่างน้อยที่สุด? ความเร็วเป็นสิ่งสำคัญ โปรแกรม screencasting จะใช้สำหรับการบันทึกวิดีโอเกมแม้ว่ามันจะแคบลง แต่ตัวเลือกฉันยังคงเปิดรับข้อเสนอแนะอื่น ๆ ที่หลุดออกจากขอบเขตนี้ ความรู้ไม่เลวหลังจากทั้งหมด แก้ไข : ฉันมาข้ามบทความนี้: วิธีการต่างๆสำหรับการจับหน้าจอ มันแนะนำให้ฉันรู้จักกับวิธีการทำ Windows Media API และวิธี DirectX ในการทำมัน โดยกล่าวถึงในข้อสรุปว่าการปิดใช้งานการเร่งด้วยฮาร์ดแวร์สามารถปรับปรุงประสิทธิภาพของแอปพลิเคชันการจับภาพได้อย่างมาก ฉันอยากรู้ว่าทำไมถึงเป็นแบบนี้ ใครช่วยเติมเต็มช่องว่างที่ขาดหายไปให้ฉันได้ไหม แก้ไข : ฉันอ่านโปรแกรม screencasting เช่น Camtasia ใช้ไดรเวอร์การจับภาพของตัวเอง มีคนให้คำอธิบายในเชิงลึกเกี่ยวกับวิธีการทำงานและทำไมมันเร็วกว่า ฉันอาจต้องการคำแนะนำในการดำเนินการบางอย่างเช่นนั้น แต่ฉันแน่ใจว่ามีเอกสารที่มีอยู่แล้ว นอกจากนี้ฉันรู้แล้วว่า FRAPS บันทึกหน้าจอได้อย่างไร มันขอ API กราฟิกพื้นฐานที่จะอ่านจากบัฟเฟอร์ด้านหลัง จากสิ่งที่ฉันเข้าใจนี่เป็นเร็วกว่าการอ่านจากบัฟเฟอร์ด้านหน้าเพราะคุณกำลังอ่านจาก RAM ระบบมากกว่าวิดีโอ RAM …
159 c++  c  windows 

12
วิธีการพิมพ์ไปยังคอนโซลเมื่อใช้ Qt
ฉันใช้ Qt4 และ C ++ เพื่อสร้างบางโปรแกรมในคอมพิวเตอร์กราฟิก ฉันต้องสามารถพิมพ์ตัวแปรบางอย่างในคอนโซลของฉันในเวลาทำงานไม่ใช่การดีบั๊ก แต่coutดูเหมือนจะไม่ทำงานแม้ว่าฉันจะเพิ่มห้องสมุด มีวิธีทำเช่นนี้หรือไม่?
159 c++  qt  cout 

9
C ++ valarray กับเวกเตอร์
ฉันชอบเวกเตอร์มาก พวกเขาดีและรวดเร็ว แต่ฉันรู้ว่าสิ่งนี้เรียกว่าวาลเลย์ ทำไมฉันถึงต้องใช้วาลเลย์แทนเวกเตอร์ ฉันรู้ว่า valarrays มีน้ำตาลประโยค แต่นอกเหนือจากนั้นเมื่อมีประโยชน์

13
“ หน่วยความจำที่จัดสรรในเวลารวบรวม” หมายความว่าอย่างไร?
ในการเขียนโปรแกรมภาษาเช่น C และ C ++ ผู้คนมักจะอ้างถึงการจัดสรรหน่วยความจำแบบคงที่และแบบไดนามิก ฉันเข้าใจแนวคิด แต่วลี "หน่วยความจำทั้งหมดถูกจัดสรร (สงวนไว้) ในช่วงเวลารวบรวม" ทำให้ฉันสับสนอยู่เสมอ การรวบรวมดังที่ฉันเข้าใจแล้วจะแปลงรหัส C / C ++ ระดับสูงเป็นภาษาเครื่องและส่งออกไฟล์ปฏิบัติการ หน่วยความจำ "จัดสรร" ในไฟล์ที่คอมไพล์แล้วเป็นอย่างไร? การจัดสรรหน่วยความจำใน RAM มักจะไม่ใช่เรื่องการจัดการหน่วยความจำเสมือนทุกครั้งหรือไม่ การจัดสรรหน่วยความจำตามคำนิยามไม่ใช่แนวคิดของรันไทม์ใช่หรือไม่ ถ้าฉันสร้างตัวแปรที่จัดสรรแบบคงที่ 1KB ในรหัส C / C ++ ของฉันนั่นจะเพิ่มขนาดของไฟล์ปฏิบัติการด้วยจำนวนเดียวกันหรือไม่? นี่เป็นหนึ่งในหน้าที่ใช้วลีภายใต้หัวข้อ "การจัดสรรแบบคงที่" กลับไปสู่พื้นฐาน: การจัดสรรหน่วยความจำประวัติความเป็นมา

2
การใช้สมาร์ทพอยน์เตอร์สำหรับสมาชิกชั้นเรียน
ฉันมีปัญหาในการทำความเข้าใจการใช้งานตัวชี้อัจฉริยะในฐานะสมาชิกคลาสใน C ++ 11 ฉันได้อ่านพอยน์เตอร์ที่ชาญฉลาดมากและฉันคิดว่าฉันเข้าใจวิธีการunique_ptrและshared_ptr/ หรือweak_ptrทำงานโดยทั่วไป สิ่งที่ฉันไม่เข้าใจคือการใช้งานจริง ดูเหมือนว่าทุกคนแนะนำให้ใช้unique_ptrเป็นวิธีที่จะไปเกือบตลอดเวลา แต่ฉันจะใช้บางสิ่งเช่นนี้ได้อย่างไร: class Device { }; class Settings { Device *device; public: Settings(Device *device) { this->device = device; } Device *getDevice() { return device; } }; int main() { Device *device = new Device(); Settings settings(device); // ... Device *myDevice = settings.getDevice(); // …

6
'typeid' กับ 'typeof' ใน C ++
ฉันสงสัยว่าอะไรคือความแตกต่างระหว่างtypeidและtypeofใน C ++ นี่คือสิ่งที่ฉันรู้: typeidถูกกล่าวถึงในเอกสารสำหรับ type_infoซึ่งถูกกำหนดไว้ใน C ++ ไฟล์ส่วนหัวtypeinfo typeofถูกกำหนดในส่วนขยาย GCC สำหรับ C และในไลบรารีC ++ Boost นอกจากนี้ที่นี่คือการทดสอบการทดสอบรหัสที่ฉันได้สร้างที่ฉันได้ค้นพบ typeidแล้วว่าไม่ได้คืนสิ่งที่ฉันคาดไว้ ทำไม? main.cpp #include <iostream> #include <typeinfo> //for 'typeid' to work class Person { public: // ... Person members ... virtual ~Person() {} }; class Employee : public Person { // ... Employee …
159 c++  typeof  typeid 

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