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

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

19
ฉันจะลบการทำสำเนารหัสระหว่างฟังก์ชั่นสมาชิกแบบ const และ non-const ที่คล้ายกันได้อย่างไร
สมมติว่าฉันมีสิ่งต่อไปนี้class Xที่ฉันต้องการคืนการเข้าถึงสมาชิกภายใน: class Z { // details }; class X { std::vector<Z> vecZ; public: Z& Z(size_t index) { // massive amounts of code for validating index Z& ret = vecZ[index]; // even more code for determining that the Z instance // at index is *exactly* the right sort of Z …

21
การคืนค่าหลายค่าจากฟังก์ชัน C ++
มีวิธีที่ต้องการคืนค่าหลายค่าจากฟังก์ชั่น C ++ หรือไม่? ตัวอย่างเช่นลองนึกภาพฟังก์ชันที่หารจำนวนเต็มสองจำนวนแล้วส่งกลับทั้งผลหารและส่วนที่เหลือ วิธีหนึ่งที่ฉันมักเห็นคือใช้พารามิเตอร์อ้างอิง: void divide(int dividend, int divisor, int& quotient, int& remainder); การเปลี่ยนแปลงคือการคืนค่าหนึ่งและส่งผ่านค่าพารามิเตอร์อ้างอิง: int divide(int dividend, int divisor, int& remainder); อีกวิธีหนึ่งคือการประกาศให้ struct มีผลลัพธ์ทั้งหมดและส่งคืนสิ่งนั้น: struct divide_result { int quotient; int remainder; }; divide_result divide(int dividend, int divisor); เป็นวิธีหนึ่งในวิธีเหล่านี้ที่ต้องการโดยทั่วไปหรือมีข้อเสนอแนะอื่น ๆ หรือไม่ แก้ไข: ในรหัสโลกแห่งความจริงอาจมีผลลัพธ์มากกว่าสองรายการ พวกเขาอาจเป็นประเภทที่แตกต่างกัน
242 c++ 


6
เหตุใดจึงใช้เนมสเปซที่ไม่มีชื่อและประโยชน์ของพวกเขาคืออะไร
ฉันเพิ่งเข้าร่วมโครงการซอฟต์แวร์ C ++ ใหม่และฉันพยายามเข้าใจการออกแบบ โครงการใช้เนมสเปซที่ไม่มีชื่อเป็นประจำ ตัวอย่างเช่นสิ่งนี้อาจเกิดขึ้นในไฟล์คำจำกัดความของคลาส: // newusertype.cc namespace { const int SIZE_OF_ARRAY_X; const int SIZE_OF_ARRAY_Y; bool getState(userType*,otherUserType*); } newusertype::newusertype(...) {... อะไรคือข้อควรพิจารณาในการออกแบบที่อาจทำให้เกิดการใช้เนมสเปซที่ไม่มีชื่อ ข้อดีและข้อเสียคืออะไร?
242 c++  oop  namespaces 

21
ฉันจะตรวจสอบว่าสตริง C ++ std :: เริ่มต้นด้วยสตริงที่แน่นอนและแปลงสตริงย่อยเป็น int ได้อย่างไร
ฉันจะใช้สิ่งต่อไปนี้ (Python pseudocode) ใน C ++ ได้อย่างไร if argv[1].startswith('--foo='): foo_value = int(argv[1][len('--foo='):]) (ตัวอย่างเช่นถ้าargv[1]เป็น--foo=98เช่นนั้นfoo_valueคือ98) อัปเดต:ฉันลังเลที่จะดู Boost เนื่องจากฉันแค่มองการเปลี่ยนแปลงเล็กน้อยเป็นเครื่องมือบรรทัดคำสั่งเล็ก ๆ น้อย ๆ (ฉันไม่ต้องการเรียนรู้วิธีเชื่อมโยงและใช้ Boost สำหรับผู้เยาว์ การเปลี่ยนแปลง)

4
(-2147483648> 0) ผลตอบแทนจริงใน C ++?
-2147483648 เป็นจำนวนเต็มที่น้อยที่สุดสำหรับประเภทจำนวนเต็มด้วย 32 บิต แต่ดูเหมือนว่าจะล้นในif(...)ประโยค: if (-2147483648 > 0) std::cout << "true"; else std::cout << "false"; สิ่งนี้จะพิมพ์ออกมาtrueในการทดสอบของฉัน อย่างไรก็ตามหากเราส่ง -2147483648 ไปเป็นจำนวนเต็มผลลัพธ์จะแตกต่างกัน: if (int(-2147483648) > 0) std::cout << "true"; else std::cout << "false"; falseนี้จะพิมพ์ ฉันสับสน ใครสามารถให้คำอธิบายเกี่ยวกับเรื่องนี้? อัปเดต 02-05-2012: ขอบคุณสำหรับความคิดเห็นของคุณในคอมไพเลอร์ของฉันขนาดของ int คือ 4 ไบต์ ฉันใช้ VC เพื่อทดสอบอย่างง่าย ฉันเปลี่ยนคำอธิบายในคำถามของฉัน นั่นเป็นคำตอบที่ดีมากในโพสต์นี้AndreyTให้คำอธิบายโดยละเอียดเกี่ยวกับวิธีคอมไพเลอร์จะทำงานกับอินพุตเหล่านี้อย่างไรและวิธีการใช้จำนวนเต็มขั้นต่ำนี้ qPCR4virในอีกทางหนึ่งให้ "ความอยากรู้" ที่เกี่ยวข้องและวิธีการแสดงจำนวนเต็ม น่าประทับใจมาก!

6
C ++ ใหม่ int [0] - มันจะจัดสรรหน่วยความจำหรือไม่
แอปทดสอบอย่างง่าย: cout << new int[0] << endl; เอาท์พุท: 0x876c0b8 ดังนั้นจึงดูเหมือนว่ามันใช้งานได้ มาตรฐานพูดถึงอะไรเกี่ยวกับเรื่องนี้? เป็นเรื่องถูกกฎหมายหรือไม่ที่จะ "จัดสรร" บล็อกหน่วยความจำที่ว่างเปล่าอยู่เสมอ?

12
เขียนไฟล์ไบนารีใน C ++ อย่างรวดเร็ว
ฉันกำลังพยายามเขียนข้อมูลจำนวนมากบน SSD ของฉัน (โซลิดสเตทไดรฟ์) และโดยจำนวนมากฉันหมายถึง 80GB ฉันเรียกค้นเว็บเพื่อหาแนวทางแก้ไข แต่สิ่งที่ดีที่สุดที่ฉันพบคือ: #include <fstream> const unsigned long long size = 64ULL*1024ULL*1024ULL; unsigned long long a[size]; int main() { std::fstream myfile; myfile = std::fstream("file.binary", std::ios::out | std::ios::binary); //Here would be some error handling for(int i = 0; i < 32; ++i){ //Some calculations to fill …

6
วิธีการใช้ตัววนซ้ำที่กำหนดเองและ const_iterators อย่างถูกต้องได้อย่างไร
ฉันมีคลาสคอนเทนเนอร์แบบกำหนดเองซึ่งฉันต้องการเขียนiteratorและconst_iteratorคลาส ฉันไม่เคยทำสิ่งนี้มาก่อนและไม่พบวิธีการที่เหมาะสม แนวทางในการสร้างตัววนซ้ำคืออะไรและฉันควรระวังอะไรบ้าง ฉันต้องการหลีกเลี่ยงการทำซ้ำรหัส (ฉันรู้สึกว่าconst_iteratorและiteratorแบ่งปันหลายสิ่งหนึ่งควร subclass อื่น ๆ ) ข้อควรทราบ: ฉันค่อนข้างมั่นใจว่า Boost มีบางอย่างในการทำให้ง่ายขึ้น แต่ฉันไม่สามารถใช้ที่นี่ได้ด้วยเหตุผลโง่ ๆ หลายประการ

10
จะสรุปองค์ประกอบของเวกเตอร์ C ++ ได้อย่างไร
อะไรคือวิธีที่ดีในการหาผลรวมขององค์ประกอบทั้งหมดในstd::vector? สมมติว่าฉันมีเวกเตอร์ที่std::vector<int> vectorมีองค์ประกอบบางอย่างอยู่ในนั้น ตอนนี้ฉันต้องการหาผลรวมขององค์ประกอบทั้งหมด อะไรกันในวิธีเดียวกัน
240 c++  stl  vector 

8
เป็นไปได้ไหมที่จะประกาศสองตัวแปรของชนิดที่แตกต่างกันใน for for loop
เป็นไปได้ไหมที่จะประกาศสองตัวแปรที่มีชนิดต่างกันในเนื้อความการเริ่มต้นของ for for loop ใน C ++? ตัวอย่างเช่น: for(int i=0,j=0 ... กำหนดจำนวนเต็มสองจำนวน ฉันสามารถนิยามinta และ a charในส่วนเริ่มต้นได้หรือไม่? สิ่งนี้จะเกิดขึ้นได้อย่างไร?


27
ทำไมต้องใช้ตัววนซ้ำแทนดัชนีอาร์เรย์
รับโค้ดสองบรรทัดต่อไปนี้: for (int i = 0; i < some_vector.size(); i++) { //do stuff } และนี่: for (some_iterator = some_vector.begin(); some_iterator != some_vector.end(); some_iterator++) { //do stuff } ฉันบอกว่าวิธีที่สองเป็นที่ต้องการ ทำไมถึงเป็นอย่างนี้

12
คุณสามารถลบองค์ประกอบออกจากรายการ std :: ในขณะที่วนซ้ำมันได้หรือไม่?
ฉันมีรหัสที่มีลักษณะดังนี้: for (std::list<item*>::iterator i=items.begin();i!=items.end();i++) { bool isActive = (*i)->update(); //if (!isActive) // items.remove(*i); //else other_code_involving(*i); } items.remove_if(CheckItemNotActive); ฉันต้องการลบรายการที่ไม่ใช้งานทันทีหลังจากอัปเดตพวกเขาเพื่อหลีกเลี่ยงการเดินรายการอีกครั้ง แต่ถ้าฉันเพิ่มบรรทัดที่ถูกคอมเม้นท์ออกฉันจะได้รับข้อผิดพลาดเมื่อไปถึงi++: "List iterator ไม่สามารถเพิ่มได้" ฉันลองใช้ตัวเลือกอื่นซึ่งไม่ได้เพิ่มในคำสั่ง for แต่ฉันไม่สามารถทำงานอะไรได้ เป็นวิธีที่ดีที่สุดในการลบรายการในขณะที่คุณกำลังเดินรายการ std :: อะไร
239 c++  list  std 

10
แม่แบบพารามิเตอร์มีประโยชน์อย่างไรบ้าง?
ฉันเคยเห็นตัวอย่างของ C ++ โดยใช้พารามิเตอร์แม่แบบแม่แบบ (นั่นคือแม่แบบที่ใช้แม่แบบเป็นพารามิเตอร์) เพื่อทำการออกแบบคลาสตามนโยบาย เทคนิคนี้มีประโยชน์อื่น ๆ อีกบ้าง?

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