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

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

9
typedefs ภายในใน C ++ - สไตล์ดีหรือสไตล์แย่?
บางสิ่งที่ฉันพบว่าตัวเองกำลังทำอยู่บ่อยครั้งเมื่อเร็ว ๆ นี้ได้ประกาศแนวความคิดที่เกี่ยวข้องกับชั้นเรียนเฉพาะภายในชั้นเรียนนั้นเช่น class Lorem { typedef boost::shared_ptr<Lorem> ptr; typedef std::vector<Lorem::ptr> vector; // // ... // }; ประเภทเหล่านี้จะถูกใช้ที่อื่นในรหัส: Lorem::vector lorems; Lorem::ptr lorem( new Lorem() ); lorems.push_back( lorem ); เหตุผลที่ฉันชอบ: มันช่วยลดเสียงรบกวนที่นำโดยแม่ชั้นstd::vector<Lorem>จะกลายLorem::vectorเป็นต้น มันทำหน้าที่เป็นคำสั่งของเจตนา - ในตัวอย่างข้างต้นคลาส Lorem มีจุดประสงค์ที่จะอ้างอิงนับผ่านboost::shared_ptrและเก็บไว้ในเวกเตอร์ จะช่วยให้การดำเนินการเปลี่ยนแปลง - เช่นถ้า Lorem จำเป็นต้องเปลี่ยนเป็นการอ้างอิงอย่างคร่าวๆนับ (ผ่านboost::intrusive_ptr) ในระยะต่อมานี่จะมีผลกระทบน้อยที่สุดกับรหัส ฉันคิดว่ามันดูดีกว่าและอ่านง่ายกว่า เหตุผลที่ฉันไม่ชอบ: บางครั้งมีปัญหาเกี่ยวกับการพึ่งพา - หากคุณต้องการฝังพูดLorem::vectorในคลาสอื่น แต่ต้องการเพียง (หรือต้องการ) เพื่อส่งต่อประกาศ …

6
OpenCV C ++ / Obj-C: การตรวจจับกระดาษ / การตรวจจับสี่เหลี่ยม
ฉันนำตัวอย่างการตรวจจับสี่เหลี่ยมจัตุรัส OpenCV ไปใช้ในแอปพลิเคชันทดสอบของฉันได้สำเร็จแล้ว แต่ตอนนี้ต้องกรองผลลัพธ์เนื่องจากมันค่อนข้างยุ่ง - หรือรหัสของฉันผิด ฉันสนใจในจุดสี่มุมของกระดาษเพื่อลดการเอียง (เช่นนั้น ) และการประมวลผลเพิ่มเติม ... อินพุตและเอาต์พุต: ภาพต้นฉบับ: คลิก รหัส: double angle( cv::Point pt1, cv::Point pt2, cv::Point pt0 ) { double dx1 = pt1.x - pt0.x; double dy1 = pt1.y - pt0.y; double dx2 = pt2.x - pt0.x; double dy2 = pt2.y - pt0.y; return …

14
ฉันจะอ่านไฟล์ทั้งหมดใน std :: string ใน C ++ ได้อย่างไร?
ฉันจะอ่านไฟล์ลงใน a ได้std::stringอย่างไรเช่นอ่านไฟล์ทั้งหมดในครั้งเดียว? ข้อความหรือโหมดไบนารีควรถูกระบุโดยผู้เรียก การแก้ปัญหาควรเป็นไปตามมาตรฐานพกพาและมีประสิทธิภาพ ไม่ควรคัดลอกข้อมูลของสตริงโดยไม่จำเป็นและควรหลีกเลี่ยงการจัดสรรหน่วยความจำใหม่ขณะอ่านสตริง วิธีหนึ่งที่จะทำเช่นนี้จะ stat ขนาดไฟล์ที่ปรับขนาดstd::stringและfread()เข้าไปในstd::string's 'const_cast<char*>() เอ็ด data()สิ่งนี้ต้องใช้std::stringข้อมูลของต่อเนื่องซึ่งไม่จำเป็นต้องใช้ตามมาตรฐาน แต่ดูเหมือนจะเป็นกรณีสำหรับการใช้งานที่รู้จักทั้งหมด ถ้าไฟล์อ่านในโหมดข้อความstd::stringขนาดของไฟล์อาจไม่เท่ากับขนาดของไฟล์ ถูกต้องอย่างเต็มที่แก้ตามมาตรฐานและแบบพกพาอาจจะสร้างขึ้นโดยใช้std::ifstream's rdbuf()เป็นและจากที่นั่นเป็นstd::ostringstream std::stringอย่างไรก็ตามสิ่งนี้สามารถคัดลอกข้อมูลสตริงและ / หรือจัดสรรหน่วยความจำโดยไม่จำเป็น การใช้งานไลบรารีมาตรฐานที่เกี่ยวข้องทั้งหมดนั้นฉลาดพอที่จะหลีกเลี่ยงค่าใช้จ่ายที่ไม่จำเป็นทั้งหมดได้หรือไม่? มีวิธีอื่นที่จะทำหรือไม่ ฉันพลาดฟังก์ชั่น Boost ที่ซ่อนอยู่ซึ่งมีฟังก์ชั่นที่ต้องการอยู่แล้วหรือไม่? void slurp(std::string& data, bool is_binary)
178 c++  string  file-io 

8
รับขนาดบรรทัดแคชโดยทางโปรแกรมหรือไม่
ยินดีต้อนรับทุกแพลตฟอร์มโปรดระบุแพลตฟอร์มสำหรับคำตอบของคุณ คำถามที่คล้ายกัน: วิธีการรับขนาดหน้าแคช CPU โดยทางโปรแกรมโดยทางโปรแกรม

30
เหตุใดจึงถือว่าการปฏิบัติที่ไม่ดีในการละเว้นการจัดฟันแบบหยิก [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ทำไมทุกคนบอกให้ฉันเขียนโค้ดแบบนี้เป็นการปฏิบัติที่ไม่ดี? if (foo) Bar(); //or for(int i = 0 i < count; i++) Bar(i); อาร์กิวเมนต์ที่ใหญ่ที่สุดของฉันสำหรับการละเว้นวงเล็บปีกกาคือบางครั้งมันอาจเป็นสองเท่าของบรรทัดกับพวกเขา ตัวอย่างเช่นต่อไปนี้เป็นโค้ดบางส่วนที่ใช้ระบายสีเอฟเฟกต์แสงสำหรับฉลากใน C # using (Brush br = new SolidBrush(Color.FromArgb(15, GlowColor))) { for (int x = 0; x <= GlowAmount; x++) { for (int y = 0; y …
177 java  c#  c++  c  coding-style 

17
การเข้าถึงอาเรย์นอกขอบเขตนั้นไม่มีข้อผิดพลาดทำไม?
ฉันกำลังกำหนดค่าในโปรแกรม C ++ จากขอบเขตดังนี้: #include <iostream> using namespace std; int main() { int array[2]; array[0] = 1; array[1] = 2; array[3] = 3; array[4] = 4; cout << array[3] << endl; cout << array[4] << endl; return 0; } โปรแกรมพิมพ์และ3 4มันไม่ควรจะเป็นไปได้ ฉันใช้ g ++ 4.3.3 นี่คือคำสั่งรวบรวมและเรียกใช้ $ g++ -W -Wall …
177 c++  arrays 


30
มาโคร C ++ จะมีประโยชน์เมื่อใด [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา ปรับปรุงคำถามนี้ C preprocessor กลัวแก้ตัวและรังเกียจโดยชุมชน c ++ ในเรียงรายฟังก์ชั่น consts #defineและแม่มักจะปลอดภัยและมีทางเลือกที่ดีกว่ากับ แมโครต่อไปนี้: #define SUCCEEDED(hr) ((HRESULT)(hr) >= 0) ไม่มีทางเหนือกว่าประเภทที่ปลอดภัย: inline bool succeeded(int hr) { return hr >= 0; } แต่มาโครมีที่อยู่โปรดระบุการใช้งานที่คุณพบสำหรับมาโครที่คุณไม่สามารถทำได้หากไม่มีตัวประมวลผลล่วงหน้า กรุณาใส่แต่ละกรณีการใช้งานในคำตอบที่แยกต่างหากเพื่อให้สามารถลงคะแนนได้และถ้าคุณรู้วิธีที่จะบรรลุหนึ่งในคำตอบโดยไม่ต้องเตรียมล่วงหน้าชี้ให้เห็นว่าในความเห็นของคำตอบนั้น


8
ตัวอย่าง / กวดวิชา Mutex? [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน4 เดือนที่ผ่านมา ปรับปรุงคำถามนี้ ฉันใหม่กับมัลติเธรดและพยายามที่จะเข้าใจวิธีการทำงานของ mutex ทำ Googling มาก แต่ก็ยังมีข้อสงสัยว่ามันทำงานอย่างไรเพราะฉันสร้างโปรแกรมของตัวเองซึ่งการล็อคไม่ทำงาน หนึ่งในไวยากรณ์ที่ไม่เข้าใจง่ายของ mutex คือpthread_mutex_lock( &mutex1 );มันดูเหมือนว่า mutex กำลังถูกล็อคเมื่อสิ่งที่ฉันต้องการล็อคจริงๆคือตัวแปรอื่น ๆ ไวยากรณ์นี้หมายความว่าการล็อก mutex ล็อคขอบเขตของรหัสจนกว่า mutex จะถูกปลดล็อกหรือไม่? จากนั้นเธรดจะรู้ได้อย่างไรว่าพื้นที่ถูกล็อก [ อัพเดท: กระทู้รู้ว่าพื้นที่ถูกล็อคโดยการ ฟันดาบของหน่วยความจำ ] และปรากฏการณ์เช่นนี้ไม่ควรถูกเรียกว่าส่วนวิกฤต [ ปรับปรุง: วัตถุส่วนที่สำคัญมีอยู่ใน Windows เท่านั้นโดยที่วัตถุนั้นเร็วกว่า mutexes และสามารถมองเห็นได้เฉพาะเธรดที่ใช้งานเท่านั้น มิฉะนั้นส่วนสำคัญจะอ้างถึงพื้นที่ของรหัสที่ป้องกันโดย mutex ] ในระยะสั้นคุณสามารถช่วยด้วยโปรแกรมตัวอย่าง mutex ที่ง่ายที่สุดที่เป็นไปได้และคำอธิบายที่ง่ายที่สุดเกี่ยวกับตรรกะของวิธีการทำงาน ฉันแน่ใจว่านี้จะช่วยให้ความอุดมสมบูรณ์ของมือใหม่อื่น …

30
มาโครในโลกแห่งความจริงที่เลวร้ายที่สุดที่คุณเคยเจอเจอเคยทำมาก่อนคืออะไร?
ล็อคแล้ว คำถามและคำตอบนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ มาโครในโลกแห่งความเป็นจริงที่เลวร้ายที่สุด คือการละเมิดที่คุณเคยเจอมาก่อน (โปรดอย่าตอบคำถาม IOCCC * haha ​​*) โปรดเพิ่มตัวอย่างสั้น ๆ หรือเรื่องราวถ้ามันสนุกจริงๆ เป้าหมายคือการสอนอะไรบางอย่างแทนที่จะบอกผู้คนเสมอว่า "ไม่เคยใช้มาโคร" ps: ฉันเคยใช้มาโครมาก่อน ... แต่โดยปกติฉันจะกำจัดมันในที่สุดเมื่อฉันมีวิธีแก้ปัญหา "ของจริง" (แม้ว่าวิธีการแก้ปัญหาจริงจะถูกแทรกเข้าไป โบนัส:ยกตัวอย่างว่าแมโครนั้นดีกว่าโซลูชันที่ไม่ใช่มาโครจริงๆ คำถามที่เกี่ยวข้อง: มาโคร C ++ จะมีประโยชน์เมื่อใด
176 c++  c  macros  preprocessor 

22
ตัวสร้างแบบคงที่ใน C ++? ฉันต้องเริ่มต้นวัตถุคงที่ส่วนตัว
ฉันต้องการคลาสที่มีสมาชิกข้อมูลสแตติกส่วนตัว (เวกเตอร์ที่มีอักขระ az ทั้งหมด) ใน java หรือ C # ฉันสามารถสร้าง "static constructor" ที่จะทำงานก่อนที่ฉันจะสร้างอินสแตนซ์ของคลาสและตั้งค่าสมาชิกข้อมูลคงที่ของคลาส มันถูกเรียกใช้เพียงครั้งเดียว (เนื่องจากตัวแปรถูกอ่านอย่างเดียวและจำเป็นต้องตั้งค่าเพียงครั้งเดียว) และเนื่องจากเป็นฟังก์ชันของคลาสจึงสามารถเข้าถึงสมาชิกส่วนตัวได้ ฉันสามารถเพิ่มโค้ดใน Constructor ที่ตรวจสอบเพื่อดูว่าเวกเตอร์เริ่มต้นได้หรือไม่และเริ่มต้นถ้าไม่ใช่ แต่แนะนำการตรวจสอบที่จำเป็นมากมายและดูเหมือนจะไม่เป็นทางออกที่ดีที่สุดสำหรับปัญหา ความคิดเกิดขึ้นกับฉันว่าเนื่องจากตัวแปรจะอ่านได้อย่างเดียวพวกเขาสามารถเป็น const คงที่แบบสาธารณะดังนั้นฉันจึงสามารถตั้งค่าพวกเขาอีกครั้งนอกชั้นเรียน แต่อีกครั้งดูเหมือนว่าแฮ็คที่น่าเกลียด เป็นไปได้หรือไม่ที่จะมีสมาชิกข้อมูลสแตติกส่วนตัวในชั้นเรียนหากฉันไม่ต้องการเริ่มต้นพวกเขาใน Constructor อินสแตนซ์?

16
ตัวอย่างที่น่าสนใจของตัวจัดสรร C ++ แบบกำหนดเอง
อะไรคือเหตุผลที่ดีในการทิ้งstd::allocatorโซลูชันที่ปรับแต่งเอง? คุณเคยเจอกับสถานการณ์ที่จำเป็นสำหรับความถูกต้องประสิทธิภาพความสามารถในการปรับขยายและอื่น ๆ หรือไม่? ตัวอย่างที่ฉลาดจริงๆ ตัวจัดสรรแบบกำหนดเองนั้นเป็นคุณสมบัติของไลบรารีมาตรฐานที่ฉันไม่ต้องการมาก ฉันแค่สงสัยว่าคนที่อยู่ใน SO สามารถให้ตัวอย่างที่น่าสนใจเพื่อพิสูจน์การมีอยู่ของพวกเขา

8
วิธีการเริ่มต้นหน่วยความจำด้วยตัวดำเนินการใหม่ใน C ++
ฉันเพิ่งเริ่มเข้าสู่ C ++ และฉันต้องการรับนิสัยที่ดี หากฉันเพิ่งจัดสรรอาเรย์ประเภทที่intมีnewโอเปอเรเตอร์ฉันจะกำหนดค่าเริ่มต้นให้เป็น 0 ได้อย่างไรโดยไม่ต้องวนลูปเองทั้งหมด? ฉันควรจะเพียงแค่ใช้memset? มีวิธี“ C ++” ที่จะทำหรือไม่

9
ฟังก์ชั่นเสมือนบริสุทธิ์พร้อมการติดตั้ง
ความเข้าใจพื้นฐานของฉันคือไม่มีการใช้งานสำหรับฟังก์ชั่นเสมือนจริง แต่ฉันก็บอกว่าอาจมีการใช้งานสำหรับฟังก์ชั่นเสมือนบริสุทธิ์ class A { public: virtual void f() = 0; }; void A::f() { cout<<"Test"<<endl; } รหัสด้านบนตกลงหรือไม่ อะไรคือจุดประสงค์ในการทำให้มันเป็นฟังก์ชั่นเสมือนที่แท้จริงพร้อมการติดตั้ง
176 c++  pure-virtual 

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