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

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

7
printf with std :: string?
ความเข้าใจของฉันคือว่าstringเป็นสมาชิกของstdnamespace ดังนั้นทำไมต่อไปนี้เกิดขึ้น #include <iostream> int main() { using namespace std; string myString = "Press ENTER to quit program!"; cout << "Come up and C++ me some time." << endl; printf("Follow this command: %s", myString); cin.get(); return 0; } แต่ละครั้งที่โปรแกรมทำงานmyStringพิมพ์สตริงสุ่มที่ดูเหมือนว่า 3 ตัวอักษรเช่นในเอาต์พุตด้านบน
157 c++  string  namespaces  printf  std 

2
การสืบทอด C ++ - ฐานที่เข้าถึงไม่ได้?
ฉันดูเหมือนจะไม่สามารถใช้คลาสฐานเป็นพารามิเตอร์ฟังก์ชั่นได้ฉันได้รับมรดกของฉันหรือไม่ ฉันมีดังต่อไปนี้ในหลักของฉัน: int some_ftn(Foo *f) { /* some code */ }; Bar b; some_ftn(&b); และ Class Bar สืบทอดมาจาก Foo ด้วยวิธีนี้: class Bar : Foo { public: Bar(); //snip private: //snip }; สิ่งนี้ควรใช้ไม่ได้หรือไม่ ฉันดูเหมือนจะไม่สามารถโทรออกได้ในฟังก์ชั่นหลักของฉัน
157 c++  inheritance 

6
ย้ายการจับในแลมบ์ดา
ฉันจะจับภาพด้วยการย้าย (หรือที่รู้จักกันว่าการอ้างอิง rvalue) ในแลมบ์ดา C ++ 11 ได้อย่างไร ฉันกำลังพยายามเขียนสิ่งนี้: std::unique_ptr<int> myPointer(new int); std::function<void(void)> example = [std::move(myPointer)]{ *myPointer = 4; };


4
std :: lock_guard หรือ std :: scoped_lock?
C ++ 17 แนะนำคลาสล็อคใหม่ที่เรียกว่าstd::scoped_lock. เมื่อพิจารณาจากเอกสารแล้วจะดูเหมือนกับstd::lock_guardคลาสที่มีอยู่แล้ว อะไรคือความแตกต่างและฉันควรใช้เมื่อใด?

8
เหตุใด C ++ ไลบรารีและกรอบงานไม่เคยใช้พอยน์เตอร์อัจฉริยะ
ฉันอ่านบทความสองสามฉบับที่ไม่ควรใช้ตัวชี้แบบดิบ แต่ควรห่อด้วยพอยน์เตอร์พอยน์เตอร์เสมอไม่ว่าจะเป็นพอยน์เตอร์ที่กำหนดขอบเขตหรือแชร์ อย่างไรก็ตามฉันสังเกตเห็นว่าเฟรมเวิร์กอย่าง Qt, wxWidgets และไลบรารี่อย่าง Boost ไม่เคยกลับมาหรือคาดหวังว่าจะมีพอยน์เตอร์พอยน์เตอร์ราวกับว่าพวกเขาไม่ได้ใช้เลย พวกเขากลับมาหรือคาดหวังตัวชี้ดิบ มีเหตุผลอะไรบ้าง? ฉันควรอยู่ห่างจากตัวชี้สมาร์ทเมื่อฉันเขียน API สาธารณะและทำไม เพียงแค่สงสัยว่าเหตุใดจึงแนะนำสมาร์ทพอยน์เตอร์เมื่อโครงการสำคัญหลายโครงการดูเหมือนจะหลีกเลี่ยง

7
std :: enable_if เพื่อคอมไพล์ฟังก์ชันสมาชิกแบบมีเงื่อนไข
std::enable_ifฉันพยายามที่จะได้รับตัวอย่างง่ายๆในการทำงานจะเข้าใจวิธีการใช้งาน หลังจากที่ฉันอ่านคำตอบนี้ฉันคิดว่ามันไม่ควรยากเกินไปที่จะเกิดขึ้นกับตัวอย่างง่ายๆ ฉันต้องการใช้std::enable_ifเพื่อเลือกระหว่างสองฟังก์ชั่นสมาชิกและอนุญาตให้ใช้หนึ่งในนั้นเท่านั้น น่าเสียดายที่สิ่งต่อไปนี้ไม่ได้รวบรวมกับ gcc 4.7 และหลังจากเวลาผ่านไปหลายชั่วโมงของการลองฉันถามพวกคุณว่าสิ่งที่ฉันผิดคืออะไร #include <utility> #include <iostream> template< class T > class Y { public: template < typename = typename std::enable_if< true >::type > T foo() { return 10; } template < typename = typename std::enable_if< false >::type > T foo() { return 10; } }; …
156 c++  templates  g++  c++11 


12
วนซ้ำผ่านเวกเตอร์ C ++ โดยใช้ลูป 'for'
ฉันยังใหม่กับภาษา C ++ ฉันเริ่มใช้เวกเตอร์และสังเกตเห็นว่าในโค้ดทั้งหมดที่ฉันเห็นว่าจะวนซ้ำแม้ว่าเวกเตอร์ผ่านดัชนีพารามิเตอร์แรกของforลูปมักจะขึ้นอยู่กับเวกเตอร์เสมอ ใน Java ฉันอาจทำสิ่งนี้ด้วย ArrayList: for(int i=0; i < vector.size(); i++){ vector[i].doSomething(); } มีเหตุผลที่ฉันไม่เห็นสิ่งนี้ใน C ++ หรือไม่? ปฏิบัติไม่ดีหรือไม่?

14
อะไรทำให้โอเปอเรเตอร์ของ Scala โอเวอร์โหลด“ ดี” แต่ C ++ ของ“ ไม่ดี”?
ผู้ประกอบการมากไปใน C ++ นั้นหลายคนคิดว่าเป็นสิ่งไม่ดี (tm) และความผิดพลาดที่ไม่ควรทำซ้ำในภาษาที่ใหม่กว่า แน่นอนว่ามันเป็นคุณสมบัติหนึ่งที่ลดลงโดยเฉพาะเมื่อออกแบบ Java ตอนนี้ฉันเริ่มอ่าน Scala ฉันพบว่ามันมีลักษณะเหมือนตัวดำเนินการมากเกินไป (แม้ว่าในทางเทคนิคแล้วมันไม่มีตัวดำเนินการมากไปเพราะมันไม่มีตัวดำเนินการฟังก์ชันเท่านั้น) อย่างไรก็ตามดูเหมือนว่าจะไม่แตกต่างจากผู้ประกอบการมากไปใน C ++ ซึ่งผมจำได้ว่าผู้ประกอบการได้รับการกำหนดให้เป็นฟังก์ชั่นพิเศษ ดังนั้นคำถามของฉันคืออะไรทำให้แนวคิดของการกำหนด "+" ใน Scala เป็นความคิดที่ดีกว่าใน C ++

3
ความหมายของคำย่อ SSO ในบริบทของ std :: string
ในc ++ คำถามเกี่ยวกับการเพิ่มประสิทธิภาพและรูปแบบรหัสหลายคำตอบที่เรียกว่า "สปส." std::stringในบริบทของการเพิ่มประสิทธิภาพสำเนาของ SSO หมายถึงอะไรในบริบทนั้น เห็นได้ชัดว่าไม่ใช่ "การลงชื่อเข้าใช้ครั้งเดียว" "การเพิ่มประสิทธิภาพสตริงที่ใช้ร่วมกัน" อาจจะ?
155 c++  string  optimization 

7
วิธีที่รวดเร็วในการคัดลอกเวกเตอร์หนึ่งไปยังอีก
ฉันชอบสองวิธี: void copyVecFast(const vec<int>& original) { vector<int> newVec; newVec.reserve(original.size()); copy(original.begin(),original.end(),back_inserter(newVec)); } void copyVecFast(vec<int>& original) { vector<int> newVec; newVec.swap(original); } คุณจะทำอย่างไรมันได้หรือไม่?
155 c++  algorithm  stl 

10
dynamic_cast และ static_cast ใน C ++
ฉันค่อนข้างสับสนกับdynamic_castคำหลักใน C ++ struct A { virtual void f() { } }; struct B : public A { }; struct C { }; void f () { A a; B b; A* ap = &b; B* b1 = dynamic_cast<B*> (&a); // NULL, because 'a' is not a 'B' B* b2 …
155 c++  dynamic-cast 

3
เมื่อใดที่จะใช้ std :: forward เพื่อส่งต่อข้อโต้แย้ง?
C ++ 0x แสดงตัวอย่างการใช้std::forward: template<class T> void foo(T&& arg) { bar(std::forward<T>(arg)); } เมื่อใดจึงจะใช้ประโยชน์std::forwardเสมอ นอกจากนี้ยังจำเป็นต้องใช้&&ในการประกาศพารามิเตอร์มันถูกต้องในทุกกรณี? ฉันคิดว่าคุณจะต้องส่งผ่านฟังก์ชั่นชั่วคราวหากฟังก์ชั่นนั้นถูกประกาศไว้&&ในนั้นดังนั้นฟูสามารถถูกเรียกด้วยพารามิเตอร์ใด ๆ ได้หรือไม่? สุดท้ายถ้าฉันมีฟังก์ชั่นการโทรเช่นนี้ template<int val, typename... Params> void doSomething(Params... args) { doSomethingElse<val, Params...>(args...); } ฉันควรใช้สิ่งนี้แทน: template<int val, typename... Params> void doSomething(Params&&... args) { doSomethingElse<val, Params...>(std::forward<Params>(args)...); } นอกจากนี้หากใช้พารามิเตอร์สองครั้งในฟังก์ชั่นเช่นการส่งต่อไปยังสองฟังก์ชั่นในเวลาเดียวกันควรใช้std::forwardหรือไม่? จะไม่std::forwardแปลงสิ่งเดียวกันเป็นสองครั้งชั่วคราวย้ายหน่วยความจำและทำให้ไม่ถูกต้องสำหรับการใช้งานครั้งที่สอง? รหัสต่อไปนี้จะโอเคไหม template<int val, typename... Params> void doSomething(Params&&... …

1
ตรรกะเบื้องหลังคำหลัก "ใช้" ใน C ++ คืออะไร?
ตรรกะเบื้องหลังคำหลัก "ใช้" ใน C ++ คืออะไร? มันถูกใช้ในสถานการณ์ที่แตกต่างกันและฉันกำลังพยายามค้นหาว่าสิ่งเหล่านี้มีบางอย่างที่เหมือนกันหรือไม่และมีเหตุผลว่าทำไมจึงใช้คีย์เวิร์ด "ใช้" เช่นนี้ using namespace std; // to import namespace in the current namespace using T = int; // type alias using SuperClass::X; // using super class methods in derived class
155 c++  c++11 

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