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

คำถามเกี่ยวกับ C ++ ซึ่งเป็นภาษาการเขียนแบบสแตติกแบบหลายกระบวนทัศน์รวบรวมภาษาการเขียนโปรแกรมสำหรับวัตถุประสงค์ทั่วไป

3
คุณจะจัดการกับเวลาการคอมไพล์ที่ยาวขึ้นเมื่อทำงานกับเทมเพลตได้อย่างไร?
ฉันใช้ Visual Studio 2012 และเขามีกรณีที่เราเพิ่มพารามิเตอร์แม่แบบให้กับคลาส "เพียง" เพื่อแนะนำ "จุดตะเข็บ" เพื่อให้ในการทดสอบหน่วยเราสามารถแทนที่ส่วนเหล่านั้นด้วยวัตถุจำลอง โดยปกติคุณจะแนะนำจุดตะเข็บใน C ++ ได้อย่างไร: การใช้อินเตอร์เฟสและ / หรือการผสมตามเกณฑ์บางอย่างที่มีอินเตอร์เฟสนัยโดยใช้พารามิเตอร์เทมเพลตด้วย? เหตุผลหนึ่งที่ต้องถามเรื่องนี้ก็เพราะเมื่อบางครั้งการรวบรวมไฟล์ C ++ ไฟล์เดียว (ที่มีไฟล์แม่แบบที่อาจรวมถึงแม่แบบอื่น ๆ ) ส่งผลให้ในวัตถุไฟล์ที่ถูกสร้างขึ้นที่ใช้เวลาประมาณ 5-10 วินาทีในเครื่องนักพัฒนา . VS คอมไพเลอร์ยังไม่รวดเร็วโดยเฉพาะอย่างยิ่งในการรวบรวมเทมเพลตเท่าที่ฉันเข้าใจและเนื่องจากรูปแบบการรวมเทมเพลต (คุณได้รวมคำจำกัดความของเทมเพลตในทุกไฟล์ที่ใช้มันโดยอ้อมและอาจเป็นอินสแตนซ์เทมเพลตนั้นทุกครั้ง สิ่งที่ไม่มีส่วนเกี่ยวข้องกับเทมเพลตนั้น) คุณอาจมีปัญหากับเวลาในการคอมไพล์ (เมื่อทำการคอมไพล์แบบเพิ่มเติม) คุณมีวิธีจัดการกับเวลารวบรวมแบบเพิ่มขึ้น (และไม่เพียง) เมื่อทำงานกับแม่แบบ (นอกเหนือจากคอมไพเลอร์ที่ดีขึ้น / เร็วขึ้น :-))
13 c++  tdd  templates 

1
C ++ 11 รองรับฟังก์ชั่นรายการลำดับสูงกว่า
ส่วนใหญ่ทำงานเขียนโปรแกรมภาษา (เช่น Common เสียงกระเพื่อมโครงการ / แร็กเก็ต, Clojure, Haskell, สกาล่า Ocaml, SML) สนับสนุนบางส่วนทำงานร่วมกันขั้นสูงในรายการเช่นmap, filter, takeWhile, dropWhile, foldl, foldr(ดูเช่นCommon เสียงกระเพื่อมโครงการ / แร็กเก็ต, Clojure เอกสารอ้างอิงแบบเคียงข้างกัน , เอกสารHaskell , Scala , OCamlและSML ) C ++ 11 มีวิธีการหรือฟังก์ชั่นมาตรฐานที่เทียบเท่าในรายการหรือไม่? ตัวอย่างเช่นลองพิจารณาตัวอย่าง Haskell ต่อไปนี้: let xs = [1, 2, 3, 4, 5] let ys = map (\x -> …

4
มีเหตุผลการใช้งานที่แตกต่างกันสำหรับคลาส / อินเตอร์เฟสนามธรรมใน C ++ และ Java
ตาม Herb Sutter หนึ่งควรชอบอินเตอร์เฟซที่เป็นนามธรรม (ฟังก์ชั่นเสมือนบริสุทธิ์ทั้งหมด) กับคลาสนามธรรมใน C ++ เพื่อแยกการใช้งานเท่าที่จะทำได้ ในขณะที่ฉันพบว่ากฎนี้มีประโยชน์มากโดยส่วนตัวฉันเพิ่งเข้าร่วมทีมกับโปรแกรมเมอร์ Java จำนวนมากและในโค้ด Java ดูเหมือนว่าแนวทางนี้ไม่มีอยู่จริง ฟังก์ชั่นและการใช้งานของพวกเขามักจะอยู่ในชั้นเรียนนามธรรม ดังนั้นฉันจึงได้รับ Herb Sutter ผิดทั้งหมดแม้แต่กับ C ++ หรือมีความแตกต่างโดยทั่วไปในการใช้ฟังก์ชั่นนามธรรมใน C ++ เทียบกับ Java คลาสนามธรรมพร้อมโค้ดการใช้งานมีเหตุผลใน Java มากกว่าใน C ++ และถ้าใช่ทำไม

7
อะไรคือบทบาทของซิงเกิลตันคลาสนามธรรมและอินเตอร์เฟส
ฉันกำลังศึกษา OOP ใน C ++ และแม้ว่าฉันตระหนักถึงคำจำกัดความของแนวคิดทั้งสามนี้ฉันก็ไม่สามารถรู้ได้เลยว่าจะใช้เมื่อไหร่หรืออย่างไร ลองใช้คลาสนี้เป็นตัวอย่าง: class Person{ private: string name; int age; public: Person(string p1, int p2){this->name=p1; this->age=p2;} ~Person(){} void set_name (string parameter){this->name=parameter;} void set_age (int parameter){this->age=parameter;} string get_name (){return this->name;} int get_age (){return this->age;} }; 1. ซิงเกิล วิธีไม่ข้อ จำกัด ของการเรียนที่จะมีเพียงหนึ่งในการทำงานของวัตถุ? คุณสามารถออกแบบคลาสที่มีเพียง 2 อินสแตนซ์ได้หรือไม่ หรืออาจจะ 3? เมื่อใดที่แนะนำ / …

3
เราสามารถคาดหวังประสิทธิภาพอะไรได้บ้างจาก std :: string's c_str () เวลาคงที่เสมอหรือไม่
ฉันได้ทำการปรับปรุงบางอย่างที่จำเป็นเมื่อเร็ว ๆ นี้ สิ่งหนึ่งที่ฉันทำคือการเปลี่ยน ostringstreams -> sprintfs ฉันกำลังรีบพวงของ std :: strings ไปที่ array style ac, ala char foo[500]; sprintf(foo, "%s+%s", str1.c_str(), str2.c_str()); ปรากฎว่าการใช้งาน std :: string :: c_str () ของ Microsoft นั้นทำงานในเวลาคงที่ (มันแค่คืนค่าตัวชี้ภายใน) ปรากฏว่าlibstdc ++ ไม่เหมือนกัน ฉันรู้ว่ามาตรฐานไม่รับประกันสำหรับ c_str แต่มันยากที่จะจินตนาการถึงวิธีการทำเช่นนี้อีก ตัวอย่างเช่นหากพวกเขาคัดลอกไปยังหน่วยความจำพวกเขาอาจต้องจัดสรรหน่วยความจำสำหรับบัฟเฟอร์ (ปล่อยให้มันขึ้นอยู่กับผู้เรียกที่จะทำลายมัน - ไม่ใช่ส่วนหนึ่งของสัญญา STL) หรือพวกเขาจะต้องคัดลอกไปยังคงที่ภายใน บัฟเฟอร์ (อาจไม่ใช่ threadsafe และคุณไม่มีการรับประกันตลอดอายุการใช้งาน) ดังนั้นเพียงแค่คืนค่าพอยน์เตอร์ไปยังสตริงที่สิ้นสุดด้วยค่า …

7
มีการใช้อักษรตัวพิมพ์ใหญ่ร่วมกันใน C ++ หรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันทำงานเป็นจำนวนมากใน Python และ Java และทั้งสองภาษานั้นมีหลักการทั่วไป (แม้ว่าจะไม่ใช่สากล) ว่าควรใช้ตัวพิมพ์ใหญ่ในตัวระบุอย่างไร: ใช้ทั้งPascalCaseชื่อคลาสและALL_CAPSค่าคงที่ "ทั่วโลก" แต่สำหรับตัวระบุอื่น ๆ มากรหัส Java ใช้ในขณะที่จำนวนมากของงูใหญ่ใช้รหัสmixedCase underscore_delimitersฉันรู้ว่าไม่มีภาษาหรือห้องสมุดบังคับใช้ตัวพิมพ์ใหญ่ แต่อย่างใด แต่ฉันพบว่าเมื่อฉันติดกับอนุสัญญามาตรฐานสำหรับภาษาที่ฉันใช้รหัสของฉันดูเหมือนจะอ่านได้มากขึ้น ตอนนี้ฉันเริ่มโครงการใน C ++ และฉันต้องการใช้แนวคิดเดียวกัน มีการประชุมสามัญสำหรับการโอนเป็นทุนที่ฉันควรรู้เกี่ยวกับอะไร?

7
ประสบการณ์ C # แปลได้ดีในภาษา C ++ หรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ชั้นเรียนการเขียนโปรแกรมในโรงเรียนของฉันคือ C ++ แต่ฉันลงเอยด้วยการทำงานที่ทำ C # ในช่วงไม่กี่ปีที่ผ่านมา หากมีตำแหน่งที่ต้องการประสบการณ์ 1 หรือ 2 ปีใน C ++ ประสบการณ์ของฉันใน C # จะคุ้มค่าที่จะพิจารณาหรือไม่? ฉันจะมีประสิทธิภาพแค่ไหนในฐานะเช่นนี้? ดังนั้นฉันต้องเริ่มต้นในฐานะโปรแกรมเมอร์ระดับ C ++ เพื่อรับประสบการณ์ที่จำเป็นหรือไม่?
13 c#  c++  experience 

9
เขียนใหม่แอสเซมบลี IBM + COBOL ใน C ++
ฉันทำงานเป็นตัวแทน / ผู้จัดการการเช่าสำหรับ บริษัท รถเช่าที่ใช้ระบบเช่าซึ่งเขียนขึ้นในปี 1972 ฉันตัดสินใจว่าอาจถึงเวลาสำหรับการอัพเดท สำหรับพื้นหลังเล็กน้อยนี่คือตัวอย่างสั้น ๆ ของความบ้าคลั่งที่เราต้องจัดการกับโปรแกรมนี้ทุกวัน: ตัวแทนการเช่าต้องจำไว้ว่าการพิมพ์บนหน้าจอหนึ่งใช้ "MXC" ในฟิลด์ ACT (ทุกอย่างอิงตามรหัสย่อ) ซึ่งย่อมาจาก "MaXimum display on a contract" ในขณะที่อีกหน้านั้นต้องใช้ PR (for PRint) ใน ฟิลด์ ACTION แต่หน้าจอหลายจอใช้ Y ในฟิลด์ PT (สำหรับ PrinT) แต่หน้าจออื่นใช้ Y ในฟิลด์ PRT (สำหรับ PRinT) แต่หน้าจออื่นต้องการให้ผู้ใช้กด Enter (แต่ไม่ใช่การป้อนถัดจาก ตัวอักษรเนื่องจากเป็นอักขระบรรทัดใหม่นั้นจะต้องป้อนบนแป้นตัวเลข) และจากนั้น F8 หน้าจออื่นที่เกี่ยวข้อง แต่ต้องใช้เพียง F8 หน้าจอบางหน้ามีเขตข้อมูล …

6
“ อธิบายสำนวน RAII” เป็นคำถามการคัดกรอง C ++ ที่ดีหรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา บริษัท ที่ฉันทำงานด้วยขอให้ฉันทำการคัดกรองผู้สมัครทางโทรศัพท์เพื่อให้แน่ใจว่าพวกเขาจะไม่ได้อายอย่างสมบูรณ์เมื่อส่งใครบางคนไปยังลูกค้าที่มีศักยภาพ ปรากฎว่ามีผู้ใช้จำนวนพอสมควรสำหรับบทบาทผู้พัฒนา C ++ ฉันไม่ได้ใช้เวลามากในภาษา C ++ แต่ฉันได้ทำโครงการเล็ก ๆ น้อย ๆ และไม่เกี่ยวกับภาษา ฉันคิดว่า "อธิบายสำนวน RAII" จะเป็นคำถามซอฟต์บอลที่ผู้พัฒนา C ++ ส่วนใหญ่สามารถตอบได้ในขณะที่หลับครึ่งและจะทำให้ฉันสามารถถามคำถามที่น่าสนใจเกี่ยวกับประสบการณ์ได้ แต่กลับกลายเป็นว่าคนที่มีประสบการณ์ในการใช้งาน C ++ มากกว่า 10 ปีไม่รู้จักคำศัพท์นี้แม้ว่าฉันจะขยายคำย่อไปที่ "การได้มาซึ่งทรัพยากรเป็นการเริ่มต้น" ผู้สมัครคนหนึ่งบอกว่าเขารู้สึกว่าการใช้เทคนิคในการพัฒนา Windows ไม่ได้ใช้งานได้จริงเสมอไปซึ่งฉันคิดว่าเป็นความรู้สึกแปลก ๆ แต่ฉันเห็นตัวอย่างสองสามตัวอย่างที่สนับสนุนแนวความคิดนั้น) แม้แต่นักพัฒนาซอฟต์แวร์ C ++ สองคนฉันก็รู้ดีพอที่จะตัดสินความสามารถของตนว่าพวกเขาไม่รู้จักคำศัพท์ แต่เมื่ออ่านบทสรุปของเทคนิคกล่าวว่า "โอ้ใช่ฉันไม่รู้ว่ามีชื่อฉันแค่ คิดว่าสิ่งเหล่านั้นเป็นสิ่งที่คุณต้องทำ " ฉันจำคำศัพท์ได้จากหนังสือ Stroustrup ฉบับที่สองถึงแม้ว่าผลกระทบอย่างสมบูรณ์ไม่ได้เกิดขึ้นในขณะนั้น …
13 c++  interview 

7
ออกแบบ: โทรกลับไปที่ชั้นผู้ปกครอง
เมื่อสร้างแบบจำลองวัตถุกับเด็ก ๆ เป็นเรื่องปกติที่จะรวมเด็ก ๆ ผ่านการจัดองค์ประกอบในฐานะสมาชิกของชั้นผู้ปกครอง บางครั้งเด็ก ๆ ต้องบอกบางสิ่งกับผู้ปกครองพวกเขาจำเป็นต้องเรียกใช้ฟังก์ชันของผู้ปกครอง วิธีนี้สามารถทำได้โดยใช้ C ++ ตัวเลือกบางอย่างคือ: ทำให้คลาส parent ระดับโลกดังนั้นวัตถุลูกจะสามารถเรียกฟังก์ชันสมาชิกของวัตถุแม่ได้ ฉีดวัตถุแม่เป็นตัวชี้หรือการอ้างอิงลงในวัตถุลูกทุก จากนั้นเมื่อเด็กต้องการบอกวัตถุแม่บางอย่างก็สามารถทำได้เพราะมันมีตัวแปรสมาชิกที่สามารถใช้ วิธีอื่นในการทำเช่นนี้คืออะไร? มีลวดลายหรือชื่อการออกแบบทั่วไปสำหรับสิ่งนี้หรือไม่? โปรดทราบว่าฉันสนใจในแนวคิดและวิธีแก้ปัญหาใน C ++ เนื่องจากรายละเอียดจะแตกต่างกันในภาษาเชิงวัตถุอื่น ๆ ตัวอย่างเช่นจุดที่ 2 ด้านบนกล่าวถึง 'ตัวชี้หรือการอ้างอิง' และทั้งสองจะเป็นไปได้ใน C ++ เท่านั้น C ++ มีฟีเจอร์ภาษาที่ไม่ปรากฏในภาษาอื่นดังนั้นการใช้งานโซลูชันเพื่อแก้ไขปัญหาอาจรวมฟีเจอร์ภาษาเหล่านี้ซึ่งทำให้โซลูชันแตกต่างจากสิ่งที่อาจมีในภาษาอื่น


4
เหตุใดขนาดของชื่อผู้ดำเนินการรวบรวมเวลา
แต่เดิมนี่เป็นส่วนหนึ่งของคำถามอื่น เหตุใดจึงsizeofเรียกว่าตัวดำเนินการเวลาคอมไพล์ จริง ๆ แล้วมันไม่ใช่ผู้ดำเนินการ และถ้ามันเป็นตัวดำเนินการแบบคอมไพล์เวลามันช่วยในการสร้างโค้ดพกพาที่ทำงานเหมือนกันในคอมพิวเตอร์เครื่องอื่นได้อย่างไร โปรดอธิบายโดยละเอียด
12 c++ 

2
ใช้โปรแกรมจัดการกระแสข้อมูล (endl) หรืออักขระขึ้นบรรทัดใหม่ (\ n) หรือไม่
ฉันไม่มีบริบทที่เฉพาะเจาะจงที่ฉันถามคำถาม แต่ในขณะที่ฉันกำลังอ่านหนังสือเริ่มต้นบน C ++ ฉันสังเกตเห็นการใช้ทั้งตัวจัดการกระแสข้อมูล endl และตัวอักขระขึ้นบรรทัดใหม่เมื่อจัดการกับวัตถุกระแส exmaple เป็นดังนี้: cout << "Hello World" << endl; cout << "Hello World\n"; คำถามของฉันคือ: มันเหมาะสมกว่าหรือไม่ที่จะใช้ stream manipulator (endl) ในบางสถานการณ์และตัวหนีในอีกอันหนึ่ง? มีข้อเสียประสิทธิภาพในการใช้หนึ่งในสองหรือไม่? พวกเขาใช้แทนกันได้อย่างสมบูรณ์หรือไม่ ฉันอ่านว่า escape sequence ถูกเก็บไว้ในหน่วยความจำเป็นตัวอักษรเดียว หมายความว่าเหมาะสมกว่าที่จะใช้ endl ถ้าคุณใช้หน่วยความจำน้อยหรือไม่ stream manipulator endl ใช้หน่วยความจำในทางใดทางหนึ่งหรือไม่ถ้าเป็นเช่นนั้นมากกว่าลำดับ escape หรือไม่? ขอบคุณ StackExchange ขอโทษถ้าฉันโพสต์สิ่งนี้ในส่วนที่ไม่ถูกต้องฉันคิดว่ามันนับเป็นโครงสร้างข้อมูล

2
เหตุใดคลาสพื้นฐานจำเป็นต้องมี destructor เสมือนจริงที่นี่ถ้าคลาสที่ได้รับจัดสรรหน่วยความจำแบบไดนามิกดิบไม่ได้?
รหัสต่อไปนี้ทำให้หน่วยความจำรั่ว: #include <iostream> #include <memory> #include <vector> using namespace std; class base { void virtual initialize_vector() = 0; }; class derived : public base { private: vector<int> vec; public: derived() { initialize_vector(); } void initialize_vector() { for (int i = 0; i < 1000000; i++) { vec.push_back(i); } } }; …

1
ใช้คลาสเพื่อนเพื่อแค็ปซูลฟังก์ชั่นสมาชิกส่วนตัวใน C ++ - การปฏิบัติที่ดีหรือการละเมิด?
ดังนั้นฉันสังเกตเห็นว่าเป็นไปได้ที่จะหลีกเลี่ยงการใส่ฟังก์ชั่นส่วนตัวไว้ในส่วนหัวโดยทำสิ่งนี้: // In file pred_list.h: class PredicateList { int somePrivateField; friend class PredicateList_HelperFunctions; public: bool match(); } // In file pred_list.cpp: class PredicateList_HelperFunctions { static bool fullMatch(PredicateList& p) { return p.somePrivateField == 5; // or whatever } } bool PredicateList::match() { return PredicateList_HelperFunctions::fullMatch(*this); } ฟังก์ชั่นส่วนตัวไม่เคยประกาศในส่วนหัวและผู้บริโภคของชั้นเรียนที่นำเข้าส่วนหัวไม่จำเป็นต้องรู้ว่ามันมีอยู่ นี่เป็นสิ่งจำเป็นหากฟังก์ชันตัวช่วยเป็นเทมเพลต (ทางเลือกคือใส่รหัสเต็มในส่วนหัว) ซึ่งเป็นวิธีที่ฉัน "ค้นพบ" สิ่งนี้ …

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