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

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

8
การใช้ CMake เพื่อสร้างไฟล์โครงการ Visual Studio C ++
ฉันกำลังทำงานกับโปรเจ็กต์ C ++ โอเพ่นซอร์สสำหรับโค้ดที่คอมไพล์บน Linux และ Windows ฉันใช้ CMake เพื่อสร้างโค้ดบน Linux เพื่อความสะดวกในการตั้งค่าการพัฒนาและเหตุผลทางการเมืองฉันต้องยึดติดกับไฟล์ / ตัวแก้ไขโครงการ Visual Studio บน Windows (เช่นฉันไม่สามารถเปลี่ยนเป็นCode :: Blocksได้) ผมเห็นคำแนะนำในการสร้างไฟล์ Visual Studio ใช้ CMake เป็นที่นี่ คุณเคยใช้ CMake เพื่อสร้างไฟล์ Visual Studio มาก่อนหรือไม่? ประสบการณ์ของคุณเป็นอย่างไรบ้าง? สมมติว่าฉันต้องการเพิ่มไฟล์ใหม่ในโปรเจ็กต์ของฉัน ขั้นตอนการทำงานสำหรับสิ่งนี้คืออะไร?

8
ฉันควรใช้คอนเทนเนอร์ STL ใดสำหรับ FIFO
คอนเทนเนอร์ STL ใดที่เหมาะกับความต้องการของฉันมากที่สุด โดยพื้นฐานแล้วฉันมีคอนเทนเนอร์กว้าง 10 องค์ประกอบซึ่งฉันมีpush_backองค์ประกอบใหม่อย่างต่อเนื่องในขณะที่ใช้องค์ประกอบที่pop_frontเก่าแก่ที่สุด (ประมาณหนึ่งล้านครั้ง) ฉันกำลังใช้ a std::dequeสำหรับงานนี้ แต่สงสัยว่า a std::listจะมีประสิทธิภาพมากกว่านี้หรือไม่เพราะฉันไม่จำเป็นต้องจัดสรรตัวเองใหม่ (หรือบางทีฉันอาจเข้าใจผิดว่าเป็นstd::dequea std::vector?) หรือมีคอนเทนเนอร์ที่มีประสิทธิภาพมากกว่าสำหรับความต้องการของฉันหรือไม่? ปล. ฉันไม่ต้องการการเข้าถึงแบบสุ่ม
93 c++  stl  fifo 

18
Operator [] [] เกินพิกัด
เป็นไปได้ไหมที่จะโอเวอร์โหลด[]ตัวดำเนินการสองครั้ง ในการอนุญาตสิ่งนี้: function[3][3](เช่นในอาร์เรย์สองมิติ) ถ้าเป็นไปได้ฉันต้องการดูโค้ดตัวอย่าง

3
จะบังคับใช้ความหมายการย้ายได้อย่างไรเมื่อเวกเตอร์เติบโตขึ้น
ฉันมีstd::vectorวัตถุของชั้นAหนึ่ง คลาสไม่สำคัญและมีตัวสร้างการคัดลอกและย้ายตัวสร้างที่กำหนดไว้ std::vector<A> myvec; ถ้าฉันเติมเวกเตอร์ด้วยAวัตถุ (โดยใช้เช่นmyvec.push_back(a)) เวกเตอร์จะมีขนาดใหญ่ขึ้นโดยใช้ตัวสร้างการคัดลอกA( const A&)เพื่อสร้างอินสแตนซ์สำเนาใหม่ขององค์ประกอบในเวกเตอร์ ฉันสามารถบังคับใช้ตัวสร้างการย้ายของคลาสAแทนได้หรือไม่?

5
จะหาจุดตัดของสอง std :: set ใน C ++ ได้อย่างไร?
ฉันพยายามหาจุดตัดระหว่างสอง std :: set ใน C ++ แต่ฉันได้รับข้อผิดพลาดเรื่อย ๆ ฉันสร้างการทดสอบตัวอย่างเล็กน้อยสำหรับสิ่งนี้ #include <iostream> #include <vector> #include <algorithm> #include <set> using namespace std; int main() { set<int> s1; set<int> s2; s1.insert(1); s1.insert(2); s1.insert(3); s1.insert(4); s2.insert(1); s2.insert(6); s2.insert(3); s2.insert(0); set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end()); return 0; } โปรแกรมหลังไม่สร้างเอาต์พุตใด ๆ แต่ฉันคาดว่าจะมีชุดใหม่ (ขอเรียกว่าs3) โดยมีค่าต่อไปนี้: s3 = [ 1 , …

2
“ การใช้ ODR” หมายความว่าอย่างไร
เพียงแค่นี้ก็ขึ้นมาในบริบทของคำถามอื่น เห็นได้ชัดว่าฟังก์ชันสมาชิกในเทมเพลตคลาสจะถูกสร้างอินสแตนซ์เฉพาะเมื่อใช้ ODR ใครช่วยอธิบายได้ว่าหมายถึงอะไร บทความวิกิพีเดียหนึ่งนิยามกฎ (ODR)ไม่ได้พูดถึง " ODR การใช้งาน " อย่างไรก็ตามมาตรฐานกำหนดให้เป็น ตัวแปรที่มีชื่อปรากฏเป็นนิพจน์ที่มีการประเมินค่าจะถูกใช้แบบแปลกเว้นแต่ว่าจะเป็นอ็อบเจ็กต์ที่ตรงตามข้อกำหนดสำหรับการปรากฏในนิพจน์คงที่ (5.19) และการแปลงค่า lvalue-to-rvalue (4.1) จะถูกนำไปใช้ทันที ใน [basic.def.odr] แก้ไข: เห็นได้ชัดว่านี่เป็นส่วนที่ไม่ถูกต้องและทั้งย่อหน้ามีคำจำกัดความหลายคำสำหรับสิ่งต่างๆ นี่อาจเป็นสิ่งที่เกี่ยวข้องสำหรับฟังก์ชันสมาชิกเทมเพลตคลาส: ฟังก์ชันที่ไม่โอเวอร์โหลดซึ่งมีชื่อปรากฏเป็นนิพจน์ที่มีการประเมินผลหรือเป็นสมาชิกของชุดฟังก์ชันผู้สมัครหากเลือกโดยความละเอียดเกินพิกัดเมื่ออ้างถึงจากนิพจน์ที่มีการประเมินอาจจะใช้ไม่ได้เว้นแต่จะเป็นเสมือนจริงทั้งหมด ฟังก์ชันและชื่อของฟังก์ชันไม่ตรงตามคุณสมบัติอย่างชัดเจน อย่างไรก็ตามฉันไม่เข้าใจว่ากฎนี้ทำงานอย่างไรกับหน่วยคอมไพล์หลาย ๆ หน่วย? ฟังก์ชันของสมาชิกทั้งหมดถูกสร้างอินสแตนซ์หรือไม่หากฉันสร้างอินสแตนซ์เทมเพลตคลาสอย่างชัดเจน


9
คำนวณค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐานจากเวกเตอร์ของตัวอย่างใน C ++ โดยใช้ Boost
มีวิธีคำนวณค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐานสำหรับเวกเตอร์ที่มีตัวอย่างโดยใช้Boostหรือไม่? หรือฉันต้องสร้างตัวสะสมและป้อนเวกเตอร์เข้าไป

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

2
เหตุใดฉันจึงจับสิ่งนี้โดยอ้างอิง ('& this') ในแลมบ์ดาไม่ได้
ฉันเข้าใจวิธีที่ถูกต้องในการจับภาพthis(เพื่อแก้ไขคุณสมบัติของวัตถุ) ในแลมบ์ดามีดังนี้: auto f = [this] () { /* ... */ }; แต่ฉันอยากรู้เกี่ยวกับลักษณะเฉพาะต่อไปนี้ที่ฉันเคยเห็น: class C { public: void foo() { // auto f = [] () { // this not captured auto f = [&] () { // why does this work? // auto f = [&this] () { // …
93 c++  c++11  lambda 

11
มีฟังก์ชันคัดลอกอาร์เรย์ใน C / C ++ หรือไม่?
ฉันเป็นโปรแกรมเมอร์ Java ที่เรียนรู้ C / C ++ ฉันจึงรู้ว่า Java มีฟังก์ชันเหมือน System.arraycopy (); เพื่อคัดลอกอาร์เรย์ ฉันสงสัยว่ามีฟังก์ชันใน C หรือ C ++ เพื่อคัดลอกอาร์เรย์หรือไม่ ฉันสามารถค้นหาการใช้งานเพื่อคัดลอกอาร์เรย์โดยใช้สำหรับลูปพอยน์เตอร์ ฯลฯ เท่านั้น มีฟังก์ชันที่ฉันสามารถใช้เพื่อคัดลอกอาร์เรย์ได้หรือไม่?
93 c++  c  arrays 

4
ไม่ได้กำหนดการอ้างอิงถึงสมาชิกแบบคงที่
ฉันใช้คอมไพเลอร์ข้าม รหัสของฉันคือ: class WindowsTimer{ public: WindowsTimer(){ _frequency.QuadPart = 0ull; } private: static LARGE_INTEGER _frequency; }; ฉันได้รับข้อผิดพลาดต่อไปนี้: การอ้างอิงที่ไม่ได้กำหนดถึง `` WindowsTimer :: _ frequency ' ฉันยังพยายามที่จะเปลี่ยนเป็น LARGE_INTEGER _frequency.QuadPart = 0ull; หรือ static LARGE_INTEGER _frequency.QuadPart = 0ull; แต่ฉันยังคงได้รับข้อผิดพลาด ใครรู้ว่าทำไม?


4
เรียกใช้ฟังก์ชัน C จากรหัส C ++
ฉันมีฟังก์ชัน C ที่ฉันต้องการเรียกใช้จาก C ++ ฉันไม่สามารถใช้extern "C" void foo()วิธีการแบบ "" ได้เนื่องจากฟังก์ชัน C ไม่สามารถคอมไพล์โดยใช้ g ++ แต่มันรวบรวมได้ดีโดยใช้ gcc มีความคิดอย่างไรในการเรียกใช้ฟังก์ชันจาก C ++?
93 c++  c  linux  extern-c 

5
การเชื่อมโยง libstdc ++ แบบคงที่: gotchas ใด ๆ ?
ฉันต้องการปรับใช้แอปพลิเคชัน C ++ ที่สร้างขึ้นบน Ubuntu 12.10 พร้อม libstdc ++ ของ GCC 4.7 กับระบบที่ใช้ Ubuntu 10.04 ซึ่งมาพร้อมกับ libstdc ++ เวอร์ชันเก่ากว่ามาก ขณะนี้ผมกำลังรวบรวมกับ-static-libstdc++ -static-libgccที่แนะนำโดยการโพสต์บล็อกนี้: การเชื่อมโยง libstdc ++ แบบคงที่ ผู้เขียนเตือนไม่ให้ใช้โค้ด C ++ ที่โหลดแบบไดนามิกเมื่อคอมไพล์ libstdc ++ แบบคงที่ซึ่งเป็นสิ่งที่ฉันยังไม่ได้ตรวจสอบ ถึงกระนั้นทุกอย่างดูเหมือนจะราบรื่นจนถึงตอนนี้: ฉันสามารถใช้ประโยชน์จากคุณสมบัติ C ++ 11 บน Ubuntu 10.04 ซึ่งเป็นสิ่งที่ฉันเป็นหลังจากนั้น ฉันทราบว่าบทความนี้มาจากปี 2548 และอาจมีการเปลี่ยนแปลงมากมายตั้งแต่นั้นมา คำแนะนำยังคงเป็นปัจจุบันหรือไม่? มีปัญหาที่น่าสงสัยที่ฉันควรระวังหรือไม่?

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