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

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

2
ฟังก์ชันที่มีชื่อเดียวกัน แต่มีลายเซ็นต่างกันในคลาสที่ได้รับ
ฉันมีฟังก์ชันที่มีชื่อเดียวกัน แต่มีลายเซ็นต่างกันในคลาสพื้นฐานและคลาสที่ได้รับ เมื่อฉันพยายามใช้ฟังก์ชันของคลาสพื้นฐานในคลาสอื่นที่สืบทอดมาจากที่ได้รับมาฉันได้รับข้อผิดพลาด ดูรหัสต่อไปนี้: class A { public: void foo(string s){}; }; class B : public A { public: int foo(int i){}; }; class C : public B { public: void bar() { string s; foo(s); } }; ฉันได้รับข้อผิดพลาดต่อไปนี้จากคอมไพเลอร์ gcc: In member function `void C::bar()': no matching function for call …

9
stdcall และ cdecl
มี (อื่น) ทั้งสองประเภทของการประชุมเรียกร้องให้มี - stdcallและcdecl ฉันมีคำถามสองสามข้อเกี่ยวกับพวกเขา: เมื่อเรียกใช้ฟังก์ชัน cdecl ผู้เรียกจะรู้ได้อย่างไรว่าควรเพิ่มสแต็กหรือไม่ ที่ไซต์การโทรผู้โทรทราบหรือไม่ว่าฟังก์ชันที่เรียกนั้นเป็นฟังก์ชัน cdecl หรือ stdcall มันทำงานอย่างไร? ผู้โทรจะรู้ได้อย่างไรว่าควรเพิ่มสแต็กหรือไม่? หรือเป็นความรับผิดชอบของผู้เชื่อมโยง? หากฟังก์ชันที่ประกาศเป็น stdcall เรียกใช้ฟังก์ชัน (ซึ่งมีหลักการเรียกเป็น cdecl) หรือในทางกลับกันสิ่งนี้จะไม่เหมาะสมหรือไม่? โดยทั่วไปเราสามารถพูดได้ว่าการโทรใดจะเร็วกว่า - cdecl หรือ stdcall?
92 c++  stdcall  cdecl 

3
คอนสตรัคเตอร์ส่วนตัวไม่ใช่คอนสตรัคเตอร์ส่วนตัวเมื่อใด
สมมติว่าฉันมีประเภทและฉันต้องการทำให้ตัวสร้างเริ่มต้นเป็นแบบส่วนตัว ฉันเขียนสิ่งต่อไปนี้: class C { C() = default; }; int main() { C c; // error: C::C() is private within this context (g++) // error: calling a private constructor of class 'C' (clang++) // error C2248: 'C::C' cannot access private member declared in class 'C' (MSVC) auto c2 = C(); …

8
ทางเลือกสำหรับเวกเตอร์ <bool>
ตามที่ (หวังว่า) เราทุกคนรู้ว่าvector&lt;bool&gt;พังโดยสิ้นเชิงและไม่สามารถถือว่าเป็นอาร์เรย์ C ได้ วิธีที่ดีที่สุดในการรับฟังก์ชันนี้คืออะไร? จนถึงตอนนี้ความคิดที่ฉันคิดคือ: ใช้vector&lt;char&gt;แทนหรือ ใช้คลาส Wrapper และมี vector&lt;bool_wrapper&gt; พวกคุณจัดการกับปัญหานี้อย่างไร? ฉันต้องการc_array()ฟังก์ชั่น เป็นคำถามข้างเคียงถ้าฉันไม่ต้องการc_array()วิธีการใดวิธีที่ดีที่สุดในการแก้ไขปัญหานี้หากฉันต้องการเข้าถึงโดยสุ่ม ฉันควรใช้ deque หรืออย่างอื่น? แก้ไข: ฉันต้องการการปรับขนาดแบบไดนามิก สำหรับผู้ที่ไม่ทราบvector&lt;bool&gt;มีความเชี่ยวชาญเพื่อให้boolใช้เวลา 1 บิต ดังนั้นคุณจึงไม่สามารถแปลงเป็นอาร์เรย์สไตล์ C ได้ ฉันเดาว่า "เสื้อคลุม" เป็นการเรียกชื่อผิด ฉันกำลังคิดบางอย่างเช่นนี้: แน่นอนฉันต้องอ่านmy_boolเนื่องจากปัญหาการจัดตำแหน่งที่เป็นไปได้ :( struct my_bool { bool the_bool; }; vector&lt;my_bool&gt; haha_i_tricked_you;
92 c++  stl  vector  boolean 


6
ความเชี่ยวชาญเทมเพลตของวิธีการเดียวจากคลาสเทมเพลต
พิจารณาเสมอว่าส่วนหัวต่อไปนี้ซึ่งมีคลาสเทมเพลตของฉันรวมอยู่ใน.CPPไฟล์อย่างน้อยสองไฟล์โค้ดนี้คอมไพล์อย่างถูกต้อง: template &lt;class T&gt; class TClass { public: void doSomething(std::vector&lt;T&gt; * v); }; template &lt;class T&gt; void TClass&lt;T&gt;::doSomething(std::vector&lt;T&gt; * v) { // Do something with a vector of a generic T } template &lt;&gt; inline void TClass&lt;int&gt;::doSomething(std::vector&lt;int&gt; * v) { // Do something with a vector of int's } แต่สังเกตอินไลน์ในวิธีการเฉพาะ …

6
การลบตัวชี้ใน C ++
บริบท: ฉันพยายามห่อหัวตัวชี้เราเพิ่งเห็นพวกเขาเมื่อสองสามสัปดาห์ก่อนในโรงเรียนและขณะฝึกซ้อมวันนี้ฉันเจอเรื่องงี่เง่า? ปัญหาอาจตรงไปตรงมาสำหรับคุณ แต่ฉันไม่ค่อยมีประสบการณ์ในการเขียนโปรแกรมเลย ฉันเคยเห็นคำถามไม่กี่ข้อใน SO เกี่ยวกับการลบพอยน์เตอร์ แต่ดูเหมือนว่าทั้งหมดจะเกี่ยวข้องกับการลบคลาสไม่ใช่ตัวชี้ 'ธรรมดา' (หรือคำที่เหมาะสมอาจเป็นอะไรก็ได้) นี่คือรหัสที่ฉันพยายาม วิ่ง: #include &lt;iostream&gt;; using namespace std; int main() { int myVar, *myPointer; myVar = 8; myPointer = &amp;myVar; cout &lt;&lt; "delete-ing pointers " &lt;&lt; endl; cout &lt;&lt; "Memory address: " &lt;&lt; myPointer &lt;&lt; endl; // Seems I can't *just* …


6
ข้อผิดพลาด :: make_unique ไม่ใช่สมาชิกของ 'std'
ฉันกำลังพยายามรวบรวมโปรแกรมเธรดพูลต่อไปนี้ที่โพสต์ในการตรวจสอบโค้ดเพื่อทดสอบ /codereview/55100/platform-independant-thread-pool-v4 แต่ฉันได้รับข้อผิดพลาด threadpool.hpp: In member function ‘std::future&lt;decltype (task((forward&lt;Args&gt;)(args)...))&gt; threadpool::enqueue_task(Func&amp;&amp;, Args&amp;&amp; ...)’: threadpool.hpp:94:28: error: ‘make_unique’ was not declared in this scope auto package_ptr = make_unique&lt;task_package_impl&lt;R, decltype(bound_task)&gt;&gt; (std::move(bound_task), std::move(promise)); ^ threadpool.hpp:94:81: error: expected primary-expression before ‘&gt;’ token auto package_ptr = make_unique&lt;task_package_impl&lt;R, decltype(bound_task)&gt;&gt;(std::move(bound_task), std::move(promise)); ^ main.cpp: In function ‘int main()’: main.cpp:9:17: error: …

6
ความจุเริ่มต้นของเวกเตอร์ใน C ++
อะไรคือสิ่งที่capacity()ของstd::vectorซึ่งถูกสร้างขึ้นโดยใช้ constuctor เริ่มต้น? ฉันรู้ว่าค่าsize()เป็นศูนย์ เราสามารถระบุว่าเวกเตอร์ที่สร้างขึ้นเริ่มต้นไม่เรียกการจัดสรรหน่วยความจำฮีปได้หรือไม่? std::vector&lt;int&gt; iv; iv.reserve(2345);วิธีนี้มันจะเป็นไปได้ที่จะสร้างอาร์เรย์ที่มีสำรองโดยพลการโดยใช้การจัดสรรเดียวเช่น สมมติว่าด้วยเหตุผลบางประการฉันไม่ต้องการเริ่มsize()วันที่ 2345 ตัวอย่างเช่นบน Linux (g ++ 4.4.5, kernel 2.6.32 amd64) #include &lt;iostream&gt; #include &lt;vector&gt; int main() { using namespace std; cout &lt;&lt; vector&lt;int&gt;().capacity() &lt;&lt; "," &lt;&lt; vector&lt;int&gt;(10).capacity() &lt;&lt; endl; return 0; } 0,10ถูกพิมพ์ เป็นกฎหรือไม่หรือผู้ขาย STL ขึ้นอยู่กับ?

4
ความถูกต้องของ const สามารถปรับปรุงประสิทธิภาพได้หรือไม่?
ฉันได้อ่านหลายครั้งแล้วว่าการบังคับใช้ความถูกต้องของ const ในรหัส C หรือ C ++ ของคุณไม่เพียง แต่เป็นแนวทางปฏิบัติที่ดีเกี่ยวกับความสามารถในการบำรุงรักษาเท่านั้น แต่ยังอาจทำให้คอมไพเลอร์ของคุณดำเนินการปรับให้เหมาะสมได้ด้วย อย่างไรก็ตามฉันได้อ่านสิ่งที่ตรงกันข้ามอย่างสมบูรณ์เช่นกัน - ว่ามันไม่มีผลต่อประสิทธิภาพเลย ดังนั้นคุณมีตัวอย่างที่ความถูกต้องของ const อาจช่วยคอมไพเลอร์ของคุณในการปรับปรุงประสิทธิภาพโปรแกรมของคุณหรือไม่?

10
ค่าคู่ขั้นต่ำใน C / C ++
มีวิธีมาตรฐานและ / หรือแบบพกพาในการแทนค่าลบที่เล็กที่สุด (เช่นการใช้อินฟินิตี้เชิงลบ) ในโปรแกรม C (++) หรือไม่? DBL_MIN ใน float.h เป็นจำนวนบวกที่น้อยที่สุด
92 c++  c  math 

24
การลบช่องว่างนำหน้าและต่อท้ายออกจากสตริง
วิธีลบช่องว่างจากวัตถุสตริงใน C ++ ตัวอย่างเช่นวิธีการลบช่องว่างนำหน้าและต่อท้ายออกจากวัตถุสตริงด้านล่าง //Original string: " This is a sample string " //Desired string: "This is a sample string" เท่าที่ฉันทราบคลาสสตริงไม่มีวิธีใด ๆ ในการลบช่องว่างนำหน้าและต่อท้าย หากต้องการเพิ่มปัญหาวิธีขยายการจัดรูปแบบนี้เพื่อประมวลผลช่องว่างเพิ่มเติมระหว่างคำของสตริง ตัวอย่างเช่น, // Original string: " This is a sample string " // Desired string: "This is a sample string" การใช้วิธีการสตริงที่กล่าวถึงในโซลูชันฉันสามารถคิดว่าจะดำเนินการเหล่านี้ได้ในสองขั้นตอน ลบช่องว่างนำหน้าและต่อท้าย ใช้find_first_of, find_last_of, find_first_not_of, find_last_not_of และ …
92 c++  string 

12
C ++ Boost: การอ้างอิงที่ไม่ได้กำหนดเพื่อ boost :: system :: generic_category ()
ฉันพยายามรวมBoostไลบรารีไว้ในโครงการของฉันและประสบปัญหาในเรื่องเดียวกัน ฉันใช้ Ubuntu 12.10 พร้อม Codeblocks IDE และลองติดตั้งไลบรารีด้วยตนเองเพื่ออ่านคำแนะนำจากไซต์ แต่ได้รับข้อผิดพลาดพร้อมส่วนหัวและไลบรารีที่ต้องสร้างก่อนใช้ ฉันติดตั้งไลบรารีผ่านเทอร์มินัลบีsudo apt-get install libboost-all-devแล้ว หลังจากนี้ในโปรแกรมของฉันบน Codeblocks ฉันสามารถรวมส่วนหัวเช่น#include &lt;boost/regex.hpp&gt;แต่เมื่อฉันพยายามรวมส่วนหัวสำหรับไลบรารีระบบไฟล์ ( #include "boost/filesystem/operations.hpp" ) ฉันได้รับข้อผิดพลาดต่อไปนี้: /usr/include/boost/system/error_code.hpp|214|undefined reference to boost::system::generic_category()'| ฉันไม่แน่ใจว่าจะแก้ไขข้อผิดพลาดนี้อย่างไร (โดยเฉพาะใน Codeblocks บน Linux) ฉันสามารถใช้ความช่วยเหลือได้ที่นี่ Gcc: คอมไพเลอร์ รหัสโปรแกรม: พยายามเท่านั้น inlcuding ระบบไฟล์ดังกล่าวข้างต้นoperations.hppไฟล์ สร้างบันทึกจาก Codeblocks: Build started on: 20-11-2012 at 18:02.53 Build ended on: 20-11-2012 …
92 c++  linux  boost  codeblocks 


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