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

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


6
เหตุใดเวกเตอร์ <bool> จึงไม่เป็นคอนเทนเนอร์ STL
รายการที่ 18 ของสกอตต์เมเยอร์สหนังสือSTL มีผลบังคับใช้ 50 วิธีที่เฉพาะเจาะจงในการปรับปรุงการใช้งานของคุณของไลบรารีแม่แบบมาตรฐานกล่าวว่าเพื่อหลีกเลี่ยงการvector &lt;bool&gt;ที่มันไม่ได้เป็นภาชนะ STL และมันไม่ได้โดดถือbools รหัสต่อไปนี้: vector &lt;bool&gt; v; bool *pb =&amp;v[0]; จะไม่คอมไพล์ละเมิดข้อกำหนดของคอนเทนเนอร์ STL ข้อผิดพลาด: cannot convert 'std::vector&lt;bool&gt;::reference* {aka std::_Bit_reference*}' to 'bool*' in initialization vector&lt;T&gt;::operator []return type ควรจะเป็นT&amp;แต่ทำไมถึงเป็นกรณีพิเศษสำหรับvector&lt;bool&gt;? อะไรvector&lt;bool&gt;จริงๆประกอบด้วย? รายการกล่าวเพิ่มเติมว่า: deque&lt;bool&gt; v; // is a STL container and it really contains bools สามารถใช้เป็นทางเลือกอื่นได้vector&lt;bool&gt;หรือไม่? ใครช่วยอธิบายเรื่องนี้ได้ไหม

3
เหตุใด std :: getline () จึงข้ามอินพุตหลังจากการแยกรูปแบบ
ฉันมีโค้ดต่อไปนี้ที่แจ้งให้ผู้ใช้ทราบชื่อและสถานะ: #include &lt;iostream&gt; #include &lt;string&gt; int main() { std::string name; std::string state; if (std::cin &gt;&gt; name &amp;&amp; std::getline(std::cin, state)) { std::cout &lt;&lt; "Your name is " &lt;&lt; name &lt;&lt; " and you live in " &lt;&lt; state; } } สิ่งที่ฉันพบคือชื่อถูกแยกออกมาสำเร็จแล้ว แต่ไม่ใช่สถานะ นี่คืออินพุตและเอาต์พุตผลลัพธ์: Input: "John" "New Hampshire" Output: "Your name is …
105 c++  input  iostream  istream  c++-faq 


2
constexpr หมายถึงอินไลน์หรือไม่?
พิจารณาฟังก์ชันอินไลน์ต่อไปนี้: // Inline specifier version #include&lt;iostream&gt; #include&lt;cstdlib&gt; inline int f(const int x); inline int f(const int x) { return 2*x; } int main(int argc, char* argv[]) { return f(std::atoi(argv[1])); } และเวอร์ชันที่เทียบเท่า constexpr: // Constexpr specifier version #include&lt;iostream&gt; #include&lt;cstdlib&gt; constexpr int f(const int x); constexpr int f(const int x) { return …

2
Visual C ++ 2008 Express ดาวน์โหลดลิงค์ตาย? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน7 ปีที่ผ่านมา ปรับปรุงคำถามนี้ คลาสการเขียนโปรแกรมที่ฉันกำลังใช้อยู่ใช้ Visual C ++ 2008 และในการทำงานจากที่บ้านเรามีตัวเลือกในการรับรุ่นด่วน ฉันไม่พบลิงค์ดาวน์โหลดใด ๆ บนเว็บไซต์และฝ่ายสนับสนุนของ Microsoft ก็ไม่สามารถช่วยได้ ฉันยังดูแค่การใช้ Visual C ++ 2010 แต่ฉันได้ยินมาว่าไม่มีโอกาสมากนักสำหรับความเข้ากันได้ในการทำงาน หากใครมีข้อมูลว่าฉันสามารถดาวน์โหลด Visual Studio 2008 express ISO หรือ C ++ 2008 express แยกกันได้ที่ไหนโปรดแจ้งให้เราทราบ
105 c++  ide  download 

11
ควรเพิ่มการลอยตัวในลำดับใดเพื่อให้ได้ผลลัพธ์ที่แม่นยำที่สุด
นี่เป็นคำถามที่ฉันถูกถามในการสัมภาษณ์ล่าสุดของฉันและฉันอยากรู้(ฉันจำทฤษฎีการวิเคราะห์ตัวเลขไม่ได้จริง ๆ โปรดช่วยฉันด้วย :) หากเรามีฟังก์ชันบางอย่างซึ่งสะสมตัวเลขทศนิยม: std::accumulate(v.begin(), v.end(), 0.0); vเป็นstd::vector&lt;float&gt;ตัวอย่างเช่น จะดีกว่าไหมหากเรียงลำดับตัวเลขเหล่านี้ก่อนสะสม คำสั่งใดที่จะให้คำตอบที่แม่นยำที่สุด ฉันสงสัยว่าการเรียงลำดับตัวเลขจากน้อยไปมากจะทำให้ข้อผิดพลาดของตัวเลขน้อยลงแต่น่าเสียดายที่ฉันไม่สามารถพิสูจน์ได้ด้วยตัวเอง ป.ล. ฉันตระหนักดีว่าสิ่งนี้อาจไม่เกี่ยวข้องกับการเขียนโปรแกรมในโลกแห่งความเป็นจริงเพียงแค่อยากรู้อยากเห็น

9
ฉันจะเผยแพร่ข้อยกเว้นระหว่างเธรดได้อย่างไร
เรามีฟังก์ชันที่เธรดเดียวเรียกเข้ามา (เราตั้งชื่อนี้ว่าเธรดหลัก) ภายในเนื้อความของฟังก์ชั่นเราวางเธรดผู้ปฏิบัติงานหลายเธรดเพื่อทำงานที่เข้มข้นของ CPU รอให้เธรดทั้งหมดเสร็จสิ้นจากนั้นส่งคืนผลลัพธ์ในเธรดหลัก ผลลัพธ์คือผู้โทรสามารถใช้ฟังก์ชันได้อย่างไร้เดียงสาและภายในจะใช้ประโยชน์จากหลายคอร์ ดีมาก ... ปัญหาที่เรามีคือการจัดการกับข้อยกเว้น เราไม่ต้องการให้มีข้อยกเว้นในเธรดของผู้ปฏิบัติงานทำให้แอปพลิเคชันหยุดทำงาน เราต้องการให้ผู้เรียกใช้ฟังก์ชันจับพวกเขาบนเธรดหลักได้ เราต้องตรวจจับข้อยกเว้นในเธรดของผู้ปฏิบัติงานและเผยแพร่ข้ามไปยังเธรดหลักเพื่อให้พวกเขาคลี่คลายต่อไปจากที่นั่น เราจะทำเช่นนี้ได้อย่างไร? สิ่งที่ดีที่สุดที่ฉันคิดได้คือ: ตรวจสอบข้อยกเว้นที่หลากหลายในเธรดผู้ปฏิบัติงานของเรา (มาตรฐาน :: ข้อยกเว้นและข้อยกเว้นบางส่วนของเราเอง) บันทึกประเภทและข้อความของข้อยกเว้น มีคำสั่งสวิตช์ที่สอดคล้องกันบนเธรดหลักซึ่งเรียกคืนข้อยกเว้นประเภทใดก็ตามที่บันทึกไว้ในเธรดผู้ปฏิบัติงาน สิ่งนี้มีข้อเสียที่ชัดเจนในการรองรับชุดข้อยกเว้นที่ จำกัด เท่านั้นและจะต้องมีการแก้ไขเมื่อใดก็ตามที่มีการเพิ่มประเภทข้อยกเว้นใหม่

13
เหตุใดจึงไม่สามารถสร้างคอมไพเลอร์ที่สามารถระบุได้ว่าฟังก์ชัน C ++ จะเปลี่ยนค่าของตัวแปรเฉพาะหรือไม่?
ฉันอ่านบรรทัดนี้ในหนังสือ: เป็นไปไม่ได้เลยที่จะสร้างคอมไพเลอร์ที่สามารถระบุได้ว่าฟังก์ชัน C ++ จะเปลี่ยนค่าของตัวแปรเฉพาะหรือไม่ ย่อหน้านี้กำลังพูดถึงสาเหตุที่คอมไพเลอร์เป็นแบบอนุรักษ์นิยมเมื่อตรวจสอบ const-ness เหตุใดจึงไม่สามารถสร้างคอมไพเลอร์ดังกล่าวได้ คอมไพลเลอร์สามารถตรวจสอบได้ตลอดเวลาว่ามีการกำหนดตัวแปรใหม่หรือไม่ฟังก์ชันที่ไม่ใช่ const จะถูกเรียกใช้หรือหากมีการส่งผ่านเป็นพารามิเตอร์ที่ไม่ใช่ const ...

9
การอ้างอิงที่ไม่ได้กำหนดเพื่อ boost :: system :: system_category () เมื่อคอมไพล์
ฉันกำลังพยายามรวบรวมโปรแกรมบน Ubuntu 11.10 ที่ใช้ไลบรารี Boost ฉันมีไลบรารี Boost 1.46-dev จาก Ubuntu Repository ที่ติดตั้งไว้ แต่ฉันได้รับข้อผิดพลาดเมื่อรวบรวมโปรแกรม undefined reference to boost::system::system_category() ฉันทำอะไรผิด?
105 c++  boost 

5
จะนำทางผ่านเวกเตอร์โดยใช้ตัววนซ้ำได้อย่างไร (C ++)
เป้าหมายคือการเข้าถึงองค์ประกอบ "ที่ n" ของเวกเตอร์ของสตริงแทนตัวดำเนินการ [] หรือเมธอด "at" จากสิ่งที่ฉันเข้าใจตัวทำซ้ำสามารถใช้เพื่อนำทางผ่านคอนเทนเนอร์ได้ แต่ฉันไม่เคยใช้ตัวทำซ้ำมาก่อนและสิ่งที่ฉันกำลังอ่านอยู่ก็ทำให้สับสน หากใครสามารถให้ข้อมูลเกี่ยวกับวิธีบรรลุเป้าหมายนี้ได้ฉันจะขอบคุณ ขอบคุณ.
105 c++  iterator  vector 

8
opengl: glFlush () กับ glFinish ()
ฉันมีปัญหาในการแยกแยะความแตกต่างระหว่างการโทรglFlush()และglFinish(). เอกสารกล่าวว่าglFlush()และglFinish()จะผลักดันการดำเนินการที่บัฟเฟอร์ทั้งหมดไปยัง OpenGL เพื่อให้มั่นใจได้ว่าจะถูกดำเนินการทั้งหมดความแตกต่างจะglFlush()ส่งกลับทันทีที่glFinish()บล็อกจนกว่าการดำเนินการทั้งหมดจะเสร็จสมบูรณ์ เมื่ออ่านคำจำกัดความแล้วฉันคิดว่าถ้าฉันจะใช้glFlush()ฉันอาจประสบปัญหาในการส่งการดำเนินการไปยัง OpenGL มากกว่าที่จะดำเนินการได้ ดังนั้นเพื่อที่จะลองฉันสลับglFinish()a glFlush()และแท้จริงของฉันและดูเถิดโปรแกรมของฉันทำงาน (เท่าที่ฉันสามารถบอกได้) เหมือนกันทุกประการ อัตราเฟรมการใช้ทรัพยากรทุกอย่างเหมือนเดิม ดังนั้นฉันจึงสงสัยว่าการโทรทั้งสองสายมีความแตกต่างกันมากหรือไม่หรือถ้ารหัสของฉันทำให้การโทรไม่แตกต่างกัน หรือควรใช้ที่ไหนเทียบกับอีกอัน ฉันยังคิดว่า OpenGL จะมีการโทรบางอย่างต้องการglIsDone()ตรวจสอบว่าคำสั่งบัฟเฟอร์ทั้งหมดสำหรับ a glFlush()นั้นสมบูรณ์หรือไม่ (ดังนั้นจึงไม่ส่งการดำเนินการไปยัง OpenGL เร็วกว่าที่สามารถเรียกใช้งานได้) แต่ฉันไม่พบฟังก์ชันดังกล่าว . รหัสของฉันคือลูปเกมทั่วไป: while (running) { process_stuff(); render_stuff(); }
105 c++  c  opengl  graphics 

14
การใช้ส่วนหัวที่คอมไพล์ล่วงหน้าด้วย CMake
ฉันเคยเห็นโพสต์ (เก่า ๆ ) สองสามโพสต์ใน 'net เกี่ยวกับการแฮ็กด้วยกันการสนับสนุนบางส่วนสำหรับส่วนหัวที่รวบรวมไว้ล่วงหน้าใน CMake พวกเขาทั้งหมดดูเหมือนจะทั่วสถานที่และทุกคนมีวิธีการของตัวเอง วิธีที่ดีที่สุดในการทำปัจจุบันคืออะไร?

2
std :: move () โอนค่าไปยัง RValues ​​ได้อย่างไร
ฉันเพิ่งพบว่าตัวเองไม่เข้าใจตรรกะของstd::move(). ตอนแรกฉันใช้ googled แต่ดูเหมือนว่าจะมีเพียงเอกสารเกี่ยวกับวิธีใช้std::move()ไม่ใช่วิธีการทำงานของโครงสร้าง ฉันหมายความว่าฉันรู้ว่าฟังก์ชันสมาชิกเทมเพลตคืออะไร แต่เมื่อฉันดูstd::move()คำจำกัดความใน VS2010 ก็ยังสับสน คำจำกัดความของ std :: move () อยู่ด้านล่าง template&lt;class _Ty&gt; inline typename tr1::_Remove_reference&lt;_Ty&gt;::_Type&amp;&amp; move(_Ty&amp;&amp; _Arg) { // forward _Arg as movable return ((typename tr1::_Remove_reference&lt;_Ty&gt;::_Type&amp;&amp;)_Arg); } สิ่งที่แปลกก่อนสำหรับฉันคือพารามิเตอร์ (_Ty &amp;&amp; _Arg) เพราะเมื่อฉันเรียกใช้ฟังก์ชันอย่างที่คุณเห็นด้านล่าง // main() Object obj1; Object obj2 = std::move(obj1); โดยพื้นฐานแล้วมันเท่ากับ // std::move() _Ty&amp;&amp; _Arg = …

1
การแปลงภาพเป็นศิลปะ ASCII
อารัมภบท หัวข้อนี้จะปรากฏขึ้นที่นี่ใน Stack Overflow เป็นครั้งคราว แต่มักจะถูกลบออกเนื่องจากเป็นคำถามที่เขียนไม่ดี ฉันเห็นคำถามดังกล่าวมากมายและจากนั้นก็เงียบจากOP (ตัวแทนต่ำปกติ) เมื่อมีการร้องขอข้อมูลเพิ่มเติม ในบางครั้งหากข้อมูลที่ป้อนนั้นดีพอสำหรับฉันฉันตัดสินใจที่จะตอบกลับด้วยคำตอบและโดยปกติจะได้รับการโหวตเพิ่มขึ้นไม่กี่ครั้งต่อวันในขณะที่ใช้งานอยู่ แต่หลังจากนั้นไม่กี่สัปดาห์คำถามจะถูกลบ / ลบและทั้งหมดเริ่มต้นจาก จุดเริ่มต้น. ดังนั้นฉันจึงตัดสินใจเขียนคำถามและคำตอบนี้เพื่อให้สามารถอ้างอิงคำถามดังกล่าวได้โดยตรงโดยไม่ต้องเขียนคำตอบซ้ำแล้วซ้ำอีก ... อีกเหตุผลหนึ่งคือเมตาเธรดนี้มีเป้าหมายที่ฉันดังนั้นหากคุณได้รับข้อมูลเพิ่มเติมโปรดแสดงความคิดเห็น คำถาม ฉันจะแปลงภาพบิตแมปเป็นASCII artโดยใช้C ++ ได้อย่างไร ข้อ จำกัด บางประการ: ภาพระดับสีเทา โดยใช้แบบอักษรที่เว้นระยะห่างแบบโมโน ทำให้มันง่าย (ไม่ใช้สิ่งที่สูงเกินไปสำหรับโปรแกรมเมอร์ระดับเริ่มต้น) นี่คือหน้า Wikipedia ที่เกี่ยวข้องศิลปะ ASCII (ขอบคุณ @RogerRowland) นี่คือเขาวงกตที่คล้ายกับ Q&amp;A การแปลง ASCII Art

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