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

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

7
ขอบเขตของการประกาศ "ใช้" ใน C ++ คืออะไร?
ฉันใช้การประกาศ 'ใช้' ใน C ++ เพื่อเพิ่ม std :: string และ std :: vector ไปยังเนมสเปซในเครื่อง (เพื่อบันทึกการพิมพ์ 'std ::' ที่ไม่จำเป็น) using std::string; using std::vector; class Foo { /*...*/ }; ขอบเขตของคำประกาศนี้คืออะไร? หากฉันทำสิ่งนี้ในส่วนหัวจะฉีดคำประกาศ 'โดยใช้' เหล่านี้ลงในไฟล์ cpp ทุกไฟล์ที่มีส่วนหัวหรือไม่
101 c++ 

5
ฉันจะเริ่มต้น float เป็นค่าสูงสุด / นาทีได้อย่างไร
ฉันจะฮาร์ดโค้ดค่าสูงสุดหรือต่ำสุดสัมบูรณ์สำหรับทศนิยมหรือสองเท่าได้อย่างไร ฉันต้องการค้นหาค่าสูงสุด / นาทีของอาร์เรย์โดยเพียงแค่วนซ้ำและจับค่าที่ใหญ่ที่สุด นอกจากนี้ยังมีค่าอนันต์บวกและลบสำหรับการลอยฉันควรใช้สิ่งเหล่านี้แทนหรือไม่? ถ้าเป็นเช่นนั้นฉันจะระบุว่าในรหัสของฉันได้อย่างไร

8
ฉันจะกำหนดนามแฝงให้กับชื่อฟังก์ชันใน C ++ ได้อย่างไร
การสร้างชื่อใหม่สำหรับประเภทตัวแปรหรือเนมสเปซนั้นง่ายมาก แต่ฉันจะตั้งชื่อใหม่ให้กับฟังก์ชันได้อย่างไร? ตัวอย่างเช่นฉันต้องการใช้ชื่อhollerสำหรับprintf. #define ชัดเจน ... มีวิธีอื่นไหม แนวทางแก้ไข: #define holler printf void (*p)() = fn; //function pointer void (&r)() = fn; //function reference inline void g(){ f(); }
101 c++  alias 

2
เหตุใด std :: ssize () จึงถูกนำมาใช้ใน C ++ 20
C ++ 20แนะนำstd::ssize()ฟังก์ชันฟรีดังต่อไปนี้: template <class C> constexpr auto ssize(const C& c) -> std::common_type_t<std::ptrdiff_t, std::make_signed_t<decltype(c.size())>>; ดูเหมือนการใช้งานที่เป็นไปได้จะใช้static_castเพื่อแปลงค่าส่งคืนของsize()ฟังก์ชันสมาชิกของ cl ass Cเป็นคู่ที่ลงนาม เนื่องจากsize()ฟังก์ชันสมาชิกของ C จะส่งกลับค่าที่ไม่ใช่ค่าลบเสมอเหตุใดใคร ๆ จึงต้องการเก็บไว้ในตัวแปรที่ลงชื่อ static_castในกรณีที่ต้องการจริงๆมันเป็นเรื่องของความเรียบง่าย เหตุใดจึงถูกstd::ssize()นำมาใช้ใน C ++ 20
101 c++  stl  unsigned  signed  c++20 

5
เหตุใดอาร์กิวเมนต์ประเภทแผนที่ C ++ จึงต้องการตัวสร้างว่างเมื่อใช้ []
ดู รายการมาตรฐาน C ++ และประเภทที่สร้างได้ตามค่าเริ่มต้น ไม่ใช่ปัญหาใหญ่น่ารำคาญเพราะฉันไม่ต้องการให้ชั้นเรียนของฉันถูกสร้างอินสแตนซ์โดยไม่มีข้อโต้แย้ง #include <map> struct MyClass { MyClass(int t); }; int main() { std::map<int, MyClass> myMap; myMap[14] = MyClass(42); } สิ่งนี้ทำให้ฉันมีข้อผิดพลาด g ++ ต่อไปนี้: /usr/include/c++/4.3/bits/stl_map.h:419: ข้อผิดพลาด: ไม่มีฟังก์ชันที่ตรงกันสำหรับการเรียกไปที่ 'MyClass ()' สิ่งนี้จะคอมไพล์ได้ดีถ้าฉันเพิ่มตัวสร้างเริ่มต้น ฉันแน่ใจว่ามันไม่ได้เกิดจากไวยากรณ์ที่ไม่ถูกต้อง
101 c++  dictionary 


7
ฉันจะส่งออกค่าของคลาส enum ใน C ++ 11 ได้อย่างไร
ฉันจะส่งออกค่าของenum classใน C ++ 11 ได้อย่างไร ใน C ++ 03 จะเป็นเช่นนี้: #include <iostream> using namespace std; enum A { a = 1, b = 69, c= 666 }; int main () { A a = A::c; cout << a << endl; } ใน c ++ 0x รหัสนี้ไม่ได้รวบรวม #include <iostream> using …


12
การทำซ้ำเวกเตอร์ C ++ จากจุดสิ้นสุดถึงจุดเริ่มต้น
เป็นไปได้ไหมที่จะวนซ้ำเวกเตอร์จากจุดเริ่มต้นจนถึงจุดเริ่มต้น for (vector<my_class>::iterator i = my_vector.end(); i != my_vector.begin(); /* ?! */ ) { } หรือเป็นไปได้เฉพาะกับสิ่งที่ต้องการ: for (int i = my_vector.size() - 1; i >= 0; --i) { }
101 c++  vector  iterator 

8
ไม่พบตัวดำเนินการ == ขณะเปรียบเทียบโครงสร้างใน C ++
เมื่อเปรียบเทียบสองอินสแตนซ์ของโครงสร้างต่อไปนี้ฉันได้รับข้อผิดพลาด: struct MyStruct1 { MyStruct1(const MyStruct2 &_my_struct_2, const int _an_int = -1) : my_struct_2(_my_struct_2), an_int(_an_int) {} std::string toString() const; MyStruct2 my_struct_2; int an_int; }; ข้อผิดพลาดคือ: ข้อผิดพลาด C2678: binary '==': ไม่พบตัวดำเนินการที่ใช้ตัวถูกดำเนินการด้านซ้ายประเภท 'myproj :: MyStruct1' (หรือไม่มีการแปลงที่ยอมรับได้) ทำไม?

2
วิธีส่งคืนตัวชี้อัจฉริยะ (shared_ptr) โดยอ้างอิงหรือตามค่า
สมมติว่าฉันมีคลาสที่มีเมธอดที่ส่งกลับshared_ptr. ประโยชน์ที่เป็นไปได้และข้อเสียของการส่งคืนโดยอ้างอิงหรือตามมูลค่าคืออะไร? เบาะแสที่เป็นไปได้สองประการ: การทำลายวัตถุในช่วงต้น ถ้าฉันส่งคืนการshared_ptrอ้างอิงโดย (const) ตัวนับการอ้างอิงจะไม่เพิ่มขึ้นดังนั้นฉันจึงมีความเสี่ยงที่จะถูกลบวัตถุเมื่อวัตถุนั้นอยู่นอกขอบเขตในบริบทอื่น (เช่นเธรดอื่น) ถูกต้องหรือไม่ จะเกิดอะไรขึ้นถ้าสภาพแวดล้อมเป็นเธรดเดียวสถานการณ์นี้จะเกิดขึ้นได้หรือไม่ ค่าใช้จ่าย Pass-by-value นั้นไม่ฟรีอย่างแน่นอน คุ้มค่าที่จะหลีกเลี่ยงทุกครั้งที่ทำได้หรือไม่? ขอบคุณทุกๆคน.


8
“ else if” เป็นคำหลักคำเดียวหรือไม่
ฉันยังใหม่กับ C ++ ฉันมักจะเห็นคำสั่งเงื่อนไขดังต่อไปนี้: if statement_0; else if statement_1; คำถาม: syntacticallyฉันจะรักษาelse ifเป็นคำหลักเดียว? หรือจริงๆแล้วมันเป็นifคำสั่งซ้อนกันภายในด้านนอกelseเหมือนด้านล่าง? if statement_0; else if statement_1;

19
วิธีที่เร็วที่สุดในการคำนวณ sin และ cos เข้าด้วยกันคืออะไร?
ฉันต้องการคำนวณทั้งไซน์และไซน์ร่วมของค่าด้วยกัน (ตัวอย่างเช่นการสร้างเมทริกซ์การหมุน) แน่นอนว่าฉันสามารถคำนวณแยกจากกันได้a = cos(x); b = sin(x);แต่ฉันสงสัยว่ามีวิธีที่เร็วกว่าเมื่อต้องการทั้งสองค่า แก้ไข: เพื่อสรุปคำตอบจนถึงตอนนี้: วลาดกล่าวว่ามีคำสั่ง asm ที่FSINCOSคำนวณทั้งคู่ (เกือบจะในเวลาเดียวกันกับการโทรไปหาFSINคนเดียว) เช่นเดียวกับที่จิสังเกตเห็นการเพิ่มประสิทธิภาพนี้บางครั้งคอมไพเลอร์ทำไปแล้ว (เมื่อใช้แฟล็กการปรับให้เหมาะสม) คาเฟ่ชี้ให้เห็นว่าฟังก์ชั่นsincosและsincosfอาจพร้อมใช้งานและสามารถเรียกได้โดยตรงเพียงแค่รวมmath.h มีการกล่าวถึงวิธีการของ Tanascius ในการใช้ตารางการค้นหาที่ขัดแย้งกัน (อย่างไรก็ตามในคอมพิวเตอร์ของฉันและในสถานการณ์มาตรฐานจะทำงานได้เร็วกว่า 3 เท่าsincosโดยมีความแม่นยำเกือบเท่ากันสำหรับจุดลอยตัว 32 บิต) โจเอลกู๊ดวินเชื่อมโยงกับแนวทางที่น่าสนใจของเทคนิคการประมาณค่าที่รวดเร็วมากพร้อมด้วยความแม่นยำที่ค่อนข้างดี (สำหรับฉันนี่จะเร็วกว่านี้จากการค้นหาตาราง)
100 c#  c++  c  algorithm  math 

11
การคำนวณจุดลอยตัวเทียบกับจำนวนเต็มบนฮาร์ดแวร์สมัยใหม่
ฉันกำลังทำงานที่มีความสำคัญต่อประสิทธิภาพใน C ++ และขณะนี้เรากำลังใช้การคำนวณจำนวนเต็มสำหรับปัญหาที่เกิดจากจุดลอยตัวเนื่องจาก "เร็วกว่า" สิ่งนี้ทำให้เกิดปัญหาที่น่ารำคาญมากมายและเพิ่มรหัสที่น่ารำคาญมากมาย ตอนนี้ฉันจำได้ว่าอ่านเกี่ยวกับวิธีการคำนวณจุดลอยตัวช้ามากประมาณ 386 วันซึ่งฉันเชื่อว่า (IIRC) มีตัวเลือกร่วมที่เป็นตัวเลือก แต่ในปัจจุบันด้วยซีพียูที่ซับซ้อนและทรงพลังมากขึ้นอย่างทวีคูณทำให้ "ความเร็ว" ไม่แตกต่างกันหากทำการคำนวณทศนิยมหรือจำนวนเต็ม? โดยเฉพาะอย่างยิ่งเนื่องจากเวลาในการคำนวณจริงนั้นมีขนาดเล็กเมื่อเทียบกับบางสิ่งเช่นการทำให้ท่อตันหรือดึงข้อมูลจากหน่วยความจำหลัก? ฉันรู้ว่าคำตอบที่ถูกต้องคือการเปรียบเทียบกับฮาร์ดแวร์เป้าหมายวิธีที่ดีในการทดสอบสิ่งนี้คืออะไร? ฉันเขียนโปรแกรม C ++ เล็ก ๆ สองโปรแกรมและเปรียบเทียบเวลาทำงานกับ "เวลา" บน Linux แต่เวลาทำงานจริงนั้นแปรปรวนเกินไป (ไม่ได้ช่วยให้ฉันทำงานบนเซิร์ฟเวอร์เสมือน) การใช้เวลาทั้งวันของฉันไม่เพียงพอกับการใช้เกณฑ์มาตรฐานหลายร้อยรายการการสร้างกราฟ ฯลฯ มีสิ่งใดบ้างที่ฉันสามารถทำได้เพื่อทดสอบความเร็วสัมพัทธ์ที่สมเหตุสมผล ความคิดหรือความคิด? ฉันผิดเต็ม ๆ เหรอ? โปรแกรมที่ฉันใช้ดังต่อไปนี้ไม่เหมือนกันโดยวิธีใด ๆ : #include <iostream> #include <cmath> #include <cstdlib> #include <time.h> int main( int argc, char** …

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