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

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

5
การโต้ตอบกับคลาส C ++ จาก Swift
ฉันมีไลบรารีชั้นเรียนที่สำคัญที่เขียนด้วย C ++ ฉันพยายามใช้ประโยชน์จากบริดจ์บางประเภทภายใน Swift แทนที่จะเขียนใหม่เป็น Swift code แรงจูงใจหลักคือรหัส C ++ แสดงถึงไลบรารีหลักที่ใช้กับหลายแพลตฟอร์ม อย่างมีประสิทธิภาพฉันแค่สร้าง UI ที่ใช้ Swift เพื่อให้ฟังก์ชันหลักทำงานภายใต้ OS X มีคำถามอื่น ๆ ถามว่า "ฉันจะเรียกฟังก์ชัน C ++ จาก Swift ได้อย่างไร" นี่ไม่ใช่คำถามของฉัน ในการเชื่อมโยงกับฟังก์ชัน C ++ สิ่งต่อไปนี้ใช้ได้ดี: กำหนดส่วนหัวเชื่อมต่อผ่าน "C" #ifndef ImageReader_hpp #define ImageReader_hpp #ifdef __cplusplus extern "C" { #endif const char *hexdump(char *filename); const …
89 c++  swift 

3
จะเขียน std :: string ไปยังไฟล์ได้อย่างไร
ฉันต้องการเขียนstd::stringตัวแปรที่ฉันยอมรับจากผู้ใช้ไปยังไฟล์ ฉันลองใช้write()วิธีนี้แล้วมันเขียนไปที่ไฟล์ แต่เมื่อฉันเปิดไฟล์ฉันเห็นกล่องแทนที่จะเป็นสตริง สตริงเป็นเพียงคำเดียวที่มีความยาวตัวแปร เป็นstd::stringที่เหมาะสมสำหรับการนี้หรือฉันควรใช้อาร์เรย์ตัวอักษรหรือบางสิ่งบางอย่าง ofstream write; std::string studentName, roll, studentPassword, filename; public: void studentRegister() { cout<<"Enter roll number"<<endl; cin>>roll; cout<<"Enter your name"<<endl; cin>>studentName; cout<<"Enter password"<<endl; cin>>studentPassword; filename = roll + ".txt"; write.open(filename.c_str(), ios::out | ios::binary); write.put(ch); write.seekp(3, ios::beg); write.write((char *)&studentPassword, sizeof(std::string)); write.close();` }
89 c++ 

7
const ก่อนพารามิเตอร์เทียบกับ const หลังชื่อฟังก์ชัน c ++
อะไรคือความแตกต่างระหว่างสิ่งนี้ friend Circle copy(const Circle &); และอะไรทำนองนี้ friend Circle copy(Circle&) const; ฉันรู้ว่า const หลังจากฟังก์ชันถูกใช้เพื่อบอกคอมไพเลอร์ว่าฟังก์ชันนี้จะไม่พยายามเปลี่ยนอ็อบเจ็กต์ที่เรียกใช้แล้วอีกอันล่ะ?

10
ข้อผิดพลาดร้ายแรง LNK1104: ไม่สามารถเปิดไฟล์ 'libboost_system-vc110-mt-gd-1_51.lib'
ดูเหมือนว่าฉันไม่สามารถทำงานนี้ได้ ฉันสร้างแอปพลิเคชันคอนโซลง่ายๆ (ซึ่งขึ้นอยู่กับwebsocket++ไลบรารี) ซึ่งต้องการBoostไลบรารี .. แต่เมื่อฉันพยายามรวบรวมฉันได้รับ: ข้อผิดพลาดร้ายแรง LNK1104: ไม่สามารถเปิดไฟล์ 'libboost_system-vc110-mt-gd-1_51.lib' แต่ผมไม่ bjam ซึ่งสร้างขึ้นใน lib (boost_root)/stage/libsและฉันเชื่อมโยงเส้นทางไปยัง libs C++/Additionnals includesที่จะคอมไพเลอร์ ถ้าดูใน(boost_root)/stage/libsไฟล์ libboost_system-vc110-mt-gd-1_51.libก็ไม่มี มันถูกเรียกlibboost_system-vc110-mt-sgd-1_51.libแทน ความคิดใด ๆ ?
89 c++  boost 

11
คุณสร้างสตริง std :: ด้วย null ฝังได้อย่างไร
หากฉันต้องการสร้าง std :: string ด้วยบรรทัดเช่น: std::string my_string("a\0b"); โดยที่ฉันต้องการให้มีอักขระสามตัวในสตริงผลลัพธ์ (a, null, b) ฉันจะได้เพียงตัวเดียว ไวยากรณ์ที่เหมาะสมคืออะไร?
89 c++  null  stdstring 

3
ค่าเริ่มต้นค่าและความยุ่งเหยิงในการเริ่มต้นเป็นศูนย์
ฉันสับสนมากเกี่ยวกับ value- & default- & zero-initialization และโดยเฉพาะอย่างยิ่งเมื่อพวกเขาเริ่มใช้มาตรฐานC ++ 03และC ++ 11ที่แตกต่างกัน(และC ++ 14 ) ฉันกำลังอ้างถึงและพยายามขยายคำตอบที่ดีจริงๆValue- / Default- / Zero- Init C ++ 98และC ++ 03ที่นี่เพื่อให้กว้างขึ้นเนื่องจากจะช่วยผู้ใช้จำนวนมากหากมีใครช่วยกรอก จำเป็นต้องมีช่องว่างเพื่อให้มีภาพรวมที่ดีว่าจะเกิดอะไรขึ้นเมื่อใด ข้อมูลเชิงลึกทั้งหมดโดยตัวอย่างโดยสรุป: บางครั้งหน่วยความจำที่ส่งคืนโดยตัวดำเนินการใหม่จะถูกเตรียมใช้งานและบางครั้งก็ไม่ขึ้นอยู่กับว่าประเภทที่คุณกำลังสร้างขึ้นใหม่นั้นเป็นPOD (ข้อมูลเก่าธรรมดา)หรือถ้าเป็นคลาสที่มีสมาชิก POD และใช้ ตัวสร้างเริ่มต้นที่สร้างโดยคอมไพเลอร์ ในC ++ 1998มีการกำหนดค่าเริ่มต้น 2 ประเภท: zero-และdefault-initialization ในC ++ 2003เป็นประเภทที่ 3 ของการเริ่มต้นการกำหนดค่าเริ่มต้นถูกเพิ่ม ในC ++ 2011 / C ++ 2014มีการเพิ่มเฉพาะรายการเริ่มต้นและกฎสำหรับค่า- …
89 c++  c++11  c++14  c++03  c++98 

5
การส่งพอยน์เตอร์ที่ใช้ร่วมกันเป็นอาร์กิวเมนต์
ถ้าฉันประกาศว่าวัตถุที่อยู่ในตัวชี้ที่ใช้ร่วมกัน: std::shared_ptr<myClass> myClassObject(new myClass()); จากนั้นฉันต้องการส่งต่อเป็นอาร์กิวเมนต์ให้กับวิธีการ: DoSomething(myClassObject); //the called method void DoSomething(std::shared_ptr<myClass> arg1) { arg1->someField = 4; } ข้างต้นเพียงแค่เพิ่มจำนวนการอ้างอิงของ shared_pt และทุกอย่างจะดี? หรือไม่ทิ้งตัวชี้ห้อย? คุณยังควรทำสิ่งนี้หรือไม่: DoSomething(myClassObject.Get()); void DoSomething(std::shared_ptr<myClass>* arg1) { (*arg1)->someField = 4; } ฉันคิดว่าวิธีที่ 2 อาจมีประสิทธิภาพมากกว่าเพราะต้องคัดลอกที่อยู่ 1 รายการเท่านั้น (ตรงข้ามกับตัวชี้อัจฉริยะทั้งหมด) แต่วิธีที่ 1 ดูเหมือนจะอ่านได้มากกว่าและฉันไม่คาดว่าจะมีการ จำกัด ประสิทธิภาพการทำงาน ฉันแค่อยากให้แน่ใจว่าไม่มีอะไรอันตรายเกี่ยวกับเรื่องนี้ ขอขอบคุณ.

7
ทำไมเราไม่สามารถประกาศ std :: vector <AbstractClass>
หลังจากใช้เวลาในการพัฒนา C # อยู่พอสมควรฉันสังเกตเห็นว่าหากคุณประกาศคลาสนามธรรมเพื่อใช้เป็นอินเทอร์เฟซคุณจะไม่สามารถสร้างอินสแตนซ์เวกเตอร์ของคลาสนามธรรมนี้เพื่อเก็บอินสแตนซ์ของคลาสเด็กได้ #pragma once #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; class IFunnyInterface { public: virtual void IamFunny() = 0; }; class FunnyImpl: IFunnyInterface { public: virtual void IamFunny() { cout &lt;&lt; "&lt;INSERT JOKE HERE&gt;"; } }; class FunnyContainer { private: std::vector &lt;IFunnyInterface&gt; funnyItems; }; บรรทัดที่ประกาศเวกเตอร์ของคลาสนามธรรมทำให้เกิดข้อผิดพลาดนี้ใน MS VS2005: …

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

4
เหตุใดเทมเพลตฟังก์ชันจึงไม่สามารถใช้เฉพาะบางส่วนได้
ฉันทราบว่าข้อกำหนดภาษาห้ามมิให้มีความเชี่ยวชาญเฉพาะบางส่วนของเทมเพลตฟังก์ชัน ฉันต้องการทราบเหตุผลว่าทำไมจึงห้าม? พวกเขาไม่มีประโยชน์? template&lt;typename T, typename U&gt; void f() {} //allowed! template&lt;&gt; void f&lt;int, char&gt;() {} //allowed! template&lt;typename T&gt; void f&lt;char, T&gt;() {} //not allowed! template&lt;typename T&gt; void f&lt;T, int&gt;() {} //not allowed!

3
จะใช้ glOrtho () ใน OpenGL ได้อย่างไร?
ฉันไม่เข้าใจการใช้งานของglOrtho. ใครช่วยอธิบายว่ามันใช้ทำอะไร? ใช้กำหนดช่วงพิกัด xy และ z หรือไม่? glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); หมายความว่าช่วง x, y และ z อยู่ระหว่าง -1 ถึง 1?
89 c++  c  opengl 



3
void * a = & a legal ได้อย่างไร?
พิจารณารหัส C ++ ต่อไปนี้: void* a = &amp;a; เหตุใดคอมไพเลอร์จึงไม่บ่นเรื่องการใช้ตัวระบุที่ไม่ได้ประกาศ นอกจากนี้คอมไพเลอร์พิจารณาว่าตัวแปรaเป็นอย่างไร เป็นตัวชี้ไปยังวัตถุที่ว่างเปล่าหรือเป็นตัวชี้ไปยังvoid*ตัวชี้?
88 c++ 

4
Java เร็วกว่า 8 เท่าด้วยอาร์เรย์มากกว่า std :: vector ใน C ++ ผมทำอะไรผิด?
ฉันมีโค้ด Java ต่อไปนี้พร้อมอาร์เรย์ขนาดใหญ่หลายอันซึ่งไม่เคยเปลี่ยนขนาด มันทำงานใน 1100 ms บนคอมพิวเตอร์ของฉัน ผมนำมาใช้รหัสเดียวกันใน C ++ std::vectorและใช้ เวลาของการใช้งาน C ++ ซึ่งรันโค้ดเดียวกันคือ 8800 ms บนคอมพิวเตอร์ของฉัน ฉันทำอะไรผิดถึงได้ทำงานช้าขนาดนี้ โดยทั่วไปโค้ดจะทำสิ่งต่อไปนี้: for (int i = 0; i &lt; numberOfCells; ++i) { h[i] = h[i] + 1; floodedCells[i] = !floodedCells[i]; floodedCellsTimeInterval[i] = !floodedCellsTimeInterval[i]; qInflow[i] = qInflow[i] + 1; } มันวนซ้ำผ่านอาร์เรย์ต่างๆที่มีขนาดประมาณ 20,000 คุณสามารถค้นหาการใช้งานทั้งสองได้ภายใต้ลิงก์ต่อไปนี้: …

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