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

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

10
เหตุใด std :: set จึงไม่มีฟังก์ชันสมาชิก“ ประกอบด้วย”
ฉันใช้งานหนักstd::set<int>และบ่อยครั้งฉันต้องตรวจสอบว่าชุดดังกล่าวมีตัวเลขหรือไม่ ฉันคิดว่ามันเป็นธรรมชาติที่จะเขียน: if (myset.contains(number)) ... แต่เนื่องจากไม่มีcontainsสมาชิกฉันจึงต้องเขียนสิ่งที่ยุ่งยาก: if (myset.find(number) != myset.end()) .. หรือไม่ชัดเจนเท่า: if (myset.count(element) > 0) .. มีเหตุผลในการตัดสินใจออกแบบนี้หรือไม่?
103 c++  stl  stdset 

7
ทำให้โปรแกรมทำงานช้า
มีวิธีใดบ้างในการรันโปรแกรม C ++ ให้ช้าลงโดยการเปลี่ยนพารามิเตอร์ OS ใน Linux? ด้วยวิธีนี้ฉันต้องการจำลองสิ่งที่จะเกิดขึ้นหากโปรแกรมนั้นเกิดขึ้นเพื่อทำงานบนเครื่องที่ช้าลงจริง กล่าวอีกนัยหนึ่งเครื่องที่เร็วกว่าควรทำงานเป็นเครื่องที่ช้าลงสำหรับโปรแกรมนั้น ๆ
103 c++  c  linux  unix  ubuntu 

8
C ++ วิธีที่ดีที่สุดในการรับการหารจำนวนเต็มและส่วนที่เหลือ
ฉันแค่สงสัยว่าถ้าฉันต้องการหาร a ด้วย b และสนใจทั้งในผลลัพธ์ c และส่วนที่เหลือ (เช่นบอกว่าฉันมีจำนวนวินาทีและต้องการแบ่งเป็นนาทีและวินาที) วิธีที่ดีที่สุดในการ ไปเลย? มันจะเป็นอย่างไร int c = (int)a / b; int d = a % b; หรือ int c = (int)a / b; int d = a - b * c; หรือ double tmp = a / b; int c = (int)tmp; int …
103 c++  division 

2
C ++ 0x แลมบ์ดาจับตามค่าเสมอ const?
มีวิธีใดบ้างในการจับตามมูลค่าและทำให้ค่าที่จับได้ไม่ใช่ const? ฉันมี functor ของไลบรารีที่ฉันต้องการจับภาพและเรียกใช้เมธอดที่ไม่ใช่ const แต่ควรจะเป็น สิ่งต่อไปนี้ไม่ได้รวบรวม แต่การสร้าง foo :: operator () const จะแก้ไขได้ struct foo { bool operator () ( const bool & a ) { return a; } }; int _tmain(int argc, _TCHAR* argv[]) { foo afoo; auto bar = [=] () -> bool { afoo(true); }; …
103 c++  lambda  const  c++11 

3
Downcasting shared_ptr <Base> เป็น shared_ptr <Derived>?
อัปเดต: shared_ptr ในตัวอย่างนี้เหมือนใน Boost แต่ไม่รองรับ shared_polymorphic_downcast (หรือ dynamic_pointer_cast หรือ static_pointer_cast สำหรับเรื่องนั้น)! ฉันพยายามเริ่มต้นตัวชี้ที่ใช้ร่วมกันไปยังคลาสที่ได้รับโดยไม่สูญเสียจำนวนอ้างอิง struct Base { }; struct Derived : public Base { }; shared_ptr&lt;Base&gt; base(new Base()); shared_ptr&lt;Derived&gt; derived; // error: invalid conversion from 'Base* const' to 'Derived*' derived = base; จนถึงตอนนี้ดีมาก ฉันไม่ได้คาดหวังว่า C ++ จะแปลง Base * เป็น Derived * …
103 c++  gcc  boost 

6
สตริง c_str () กับ data ()
ฉันได้อ่านสถานที่หลายแห่งที่ความแตกต่างระหว่างc_str()และdata()(ใน STL และการใช้งานอื่น ๆ ) นั้นc_str()จะถูกยกเลิกเสมอในขณะที่data()ไม่ใช่ เท่าที่ผมได้เห็นในการใช้งานที่เกิดขึ้นจริงที่พวกเขาจะทำเหมือนกันหรือโทรdata()c_str() ฉันพลาดอะไรไปที่นี่? ข้อใดถูกต้องมากกว่าในการใช้ในสถานการณ์ใด
103 c++  stl  c-str 

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

3
จะสร้างไลบรารีแบบคงที่ด้วย g ++ ได้อย่างไร
ใครช่วยบอกวิธีสร้างไลบรารีแบบคงที่จากไฟล์. cpp และ. hpp ได้ไหม ฉันต้องสร้าง. o และ. a หรือไม่? ฉันต้องการทราบว่าฉันจะรวบรวมไลบรารีแบบคงที่และใช้ในรหัส. cpp อื่นได้อย่างไร ฉันมีheader.cpp, ผมอยากจะสร้างheader.hpp . header.aทดสอบส่วนหัว a ในtest.cpp. ฉันใช้ g ++ ในการรวบรวม

4
ใช้ไลบรารี C ++ ในรหัส C
ฉันมีไลบรารี C ++ ที่มีคลาสต่างๆสำหรับจัดการข้อมูล ฉันมีซอร์สโค้ดสำหรับไลบรารี ฉันต้องการขยาย C ++ API เพื่อรองรับการเรียกฟังก์ชัน C เพื่อให้สามารถใช้ไลบรารีกับรหัส C และรหัส C ++ ได้ในเวลาเดียวกัน ฉันใช้โซ่เครื่องมือ GNU (gcc, glibc ฯลฯ ) ดังนั้นการรองรับภาษาและสถาปัตยกรรมจึงไม่ใช่ปัญหา มีสาเหตุใดบ้างที่ทำให้ไม่สามารถทำได้ในทางเทคนิค ? มีgotchaอะไรบ้างที่ฉันต้องระวัง? มีแหล่งข้อมูลโค้ดตัวอย่างและ / หรือเอกสารเกี่ยวกับเรื่องนี้หรือไม่ สิ่งอื่น ๆ ที่ฉันได้ค้นพบ: ใช้สิ่งต่อไปนี้เพื่อตัดส่วนหัว C ++ ของคุณที่จำเป็นต้องใช้โดยรหัส C #ifdef __cplusplus extern "C" { #endif // // Code goes here ... …
103 c++  c  gcc  glibc 

2
เหตุใด shared_ptr <void> ถูกกฎหมายในขณะที่ unique_ptr <void> มีรูปแบบไม่ถูกต้อง
คำถามนี้เหมาะกับชื่อจริงๆ: ฉันอยากรู้ว่าอะไรคือเหตุผลทางเทคนิคสำหรับความแตกต่างนี้ แต่ยังมีเหตุผลด้วย? std::shared_ptr&lt;void&gt; sharedToVoid; // legal; std::unique_ptr&lt;void&gt; uniqueToVoid; // ill-formed;

3
การเชื่อมโยงวัตถุ C ++ 17, C ++ 14 และ C ++ 11 นั้นปลอดภัยหรือไม่
สมมติว่าฉันมีออบเจ็กต์ที่คอมไพล์สามชิ้นทั้งหมดสร้างโดยคอมไพเลอร์ / เวอร์ชันเดียวกัน : A ถูกรวบรวมด้วยมาตรฐาน C ++ 11 B ถูกรวบรวมด้วยมาตรฐาน C ++ 14 C ถูกคอมไพล์ด้วยมาตรฐาน C ++ 17 เพื่อความเรียบง่ายสมมติว่าส่วนหัวทั้งหมดเขียนด้วย C ++ 11 โดยใช้เฉพาะโครงสร้างที่ความหมายไม่ได้เปลี่ยนแปลงระหว่างเวอร์ชันมาตรฐานทั้งสามดังนั้นการพึ่งพาระหว่างกันจึงถูกแสดงอย่างถูกต้องด้วยการรวมส่วนหัวและคอมไพเลอร์ไม่คัดค้าน การรวมกันของวัตถุเหล่านี้คืออะไรและไม่ปลอดภัยที่จะเชื่อมโยงเป็นไบนารีเดียว? ทำไม? แก้ไข: ยินดีต้อนรับคำตอบที่ครอบคลุมคอมไพเลอร์หลัก (เช่น gcc, clang, vs ++)
103 c++  c++11  linker  c++14  abi 

11
วิธีแก้ข้อผิดพลาด LNK2019: สัญลักษณ์ภายนอกที่ไม่ได้รับการแก้ไข - ฟังก์ชัน
ฉันได้รับข้อผิดพลาดนี้ แต่ไม่รู้วิธีแก้ไข ฉันใช้ Visual Studio 2013 ฉันตั้งชื่อโซลูชันว่าMyProjectTest นี่คือโครงสร้างของโซลูชันการทดสอบของฉัน: - ฟังก์ชั่น h #ifndef MY_FUNCTION_H #define MY_FUNCTION_H int multiple(int x, int y); #endif -function.cpp #include "function.h" int multiple(int x, int y){ return x*y; } - main.cpp #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include "function.h" using namespace std; int main(){ int a, b; cin &gt;&gt; …

12
Visual Studio รองรับมาตรฐาน C / C ++ ใหม่หรือไม่
ฉันอ่านเกี่ยวกับ C99 และ C ++ 11 มาเรื่อย ๆ และสิ่งที่น่ารักเหล่านี้ทั้งหมดที่เพิ่มเข้ามาในมาตรฐานภาษาที่อาจจะดีในการใช้สักวันหนึ่ง อย่างไรก็ตามขณะนี้เราไม่ได้อยู่ในดินแดนแห่งการเขียน C ++ ใน Visual Studio จะมีการเพิ่มสิ่งใหม่ ๆ ในมาตรฐานลงใน Visual Studio หรือไม่หรือ Microsoft สนใจที่จะเพิ่มตัวแปร C # ใหม่เพื่อทำสิ่งนั้น แก้ไข: นอกจากคำตอบที่ยอมรับแล้วฉันยังพบบล็อกของทีม Visual C ++: http://blogs.msdn.com/vcblog/ และโดยเฉพาะโพสต์นี้อยู่ในนั้น: https://web.archive.org/web/20190109064523/https://blogs.msdn.microsoft.com/vcblog/2008/02/22/tr1-slide-decks/ มีประโยชน์มาก. ขอบคุณ!

2
คลาสข้อยกเว้นใดบ้างที่อยู่ในไลบรารี C ++ มาตรฐาน
คลาสข้อยกเว้นที่รวมอยู่ในไลบรารี C ++ มาตรฐานคืออะไรและควรใช้ทำอะไร ฉันรู้ว่ามีข้อยกเว้น C ++ 11 ใหม่ ๆ อยู่บ้าง แต่ฉันไม่แน่ใจว่ามันคืออะไรหรืออยู่ที่ไหน
102 c++  exception  c++11  stl 

12
ทำไมไม่อนุมานพารามิเตอร์เทมเพลตจากตัวสร้าง
คำถามของฉันวันนี้ค่อนข้างง่าย: ทำไมคอมไพเลอร์ไม่สามารถสรุปพารามิเตอร์เทมเพลตจากตัวสร้างคลาสได้มากเท่าที่จะทำได้จากพารามิเตอร์ฟังก์ชัน ตัวอย่างเช่นเหตุใดรหัสต่อไปนี้จึงไม่ถูกต้อง: template&lt;typename obj&gt; class Variable { obj data; public: Variable(obj d) { data = d; } }; int main() { int num = 2; Variable var(num); //would be equivalent to Variable&lt;int&gt; var(num), return 0; //but actually a compile error } อย่างที่ฉันพูดฉันเข้าใจว่ามันไม่ถูกต้องดังนั้นคำถามของฉันคือทำไมไม่เป็นเช่นนั้น? จะช่วยให้สิ่งนี้สร้างช่องทางไวยากรณ์ที่สำคัญหรือไม่? มีอินสแตนซ์ที่ใครไม่ต้องการฟังก์ชันนี้ (โดยที่การอนุมานประเภทจะทำให้เกิดปัญหา)? ฉันแค่พยายามเข้าใจตรรกะเบื้องหลังการอนุญาตให้มีการอนุมานเทมเพลตสำหรับฟังก์ชัน แต่ไม่ใช่สำหรับคลาสที่สร้างขึ้นอย่างเหมาะสม

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