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

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

3
ตัวดำเนินการ <=> ใน C ++ คืออะไร
ขณะที่ผมกำลังพยายามที่จะเรียนรู้เกี่ยวกับภาษา C ++ผู้ประกอบการที่ฉัน stumbled เมื่อดำเนินการเปรียบเทียบที่ผิดปกติในcppreference.com , *ในตารางที่มองเช่นนี้: "เอาล่ะถ้านี่เป็นโอเปอเรเตอร์ทั่วไปใน C ++ ฉันควรจะเรียนรู้" แต่ความพยายามทั้งหมดของฉันที่จะอธิบายความลึกลับนี้ไม่ประสบความสำเร็จ แม้แต่ที่นี่ใน Stack Overflow ฉันไม่มีโชคในการค้นหาของฉัน มีการเชื่อมต่อระหว่าง&lt;=&gt;และC ++หรือไม่ และถ้ามีตัวดำเนินการนี้ทำอะไรกันแน่ * ในระหว่างนี้ cppreference.com ได้อัพเดตหน้านั้นและตอนนี้มีข้อมูลเกี่ยวกับ&lt;=&gt;ผู้ให้บริการ

4
วนรอบตาม C ++ 11: รับไอเท็มตามค่าหรืออ้างอิงถึง const
การอ่านตัวอย่างของลูปแบบช่วงพวกเขาแนะนำสองวิธีหลัก1 , 2 , 3 , 4 std::vector&lt;MyClass&gt; vec; for (auto &amp;x : vec) { // x is a reference to an item of vec // We can change vec's items by changing x } หรือ for (auto x : vec) { // Value of x is copied from an …
215 c++  c++11 

11
วิธีการพิมพ์ (ใช้ cout) ตัวเลขในรูปแบบไบนารี?
ฉันกำลังเรียนหลักสูตรวิทยาลัยเกี่ยวกับระบบปฏิบัติการและเรากำลังเรียนรู้วิธีการแปลงจากเลขฐานสองเป็นเลขฐานสิบหก, ทศนิยมให้เป็นเลขฐานสิบหกเป็นต้นและวันนี้เราเพิ่งได้เรียนรู้วิธีการจัดเก็บหมายเลขลงนาม / ไม่ได้ลงนามในหน่วยความจำ + 1) เรามีแบบฝึกหัดสองข้อให้ทำบนกระดาษและฉันต้องการตรวจสอบคำตอบก่อนส่งงานให้ครู ฉันเขียนโปรแกรม C ++ สำหรับแบบฝึกหัดแรก แต่ตอนนี้ฉันติดอยู่กับวิธีที่ฉันสามารถตรวจสอบคำตอบของฉันด้วยปัญหาต่อไปนี้: char a, b; short c; a = -58; c = -315; b = a &gt;&gt; 3; และเราจำเป็นต้องแสดงแทน binary ในหน่วยความจำของa, และbc ฉันทำมันลงบนกระดาษและให้ผลลัพธ์ต่อไปนี้กับฉัน (การแทนเลขฐานสองทั้งหมดในหน่วยความจำของตัวเลขหลังจากส่วนเติมเต็มของทั้งสอง): a = 00111010 (มันเป็นถ่านดังนั้น 1 ไบต์) b = 00001000 (มันเป็นถ่านดังนั้น 1 ไบต์) c = 11111110 11000101 …

4
ความแตกต่างระหว่าง. so และ. dylib บน osx คืออะไร?
.dylib เป็นส่วนขยายไลบรารีแบบไดนามิกบน OSX แต่ไม่เคยชัดเจนสำหรับฉันเมื่อฉันไม่สามารถ / ไม่ควรใช้วัตถุที่ใช้ร่วมกัน unix .so แบบดั้งเดิม บางคำถามที่ฉันมี: ในระดับแนวคิดอะไรคือความแตกต่างที่สำคัญระหว่าง. so และ. dylib? เมื่อใดที่ / ฉันควรใช้อันอื่น? เทคนิคการรวบรวม &amp; เคล็ดลับ (ตัวอย่างเช่นการแทนที่สำหรับ gcc -shared -fPIC เนื่องจากไม่ได้ทำงานบน osx)
214 c++  c  macos  unix 

11
เปรียบเทียบสองเท่ากับศูนย์โดยใช้ epsilon
วันนี้ฉันดูรหัส C ++ (เขียนโดยคนอื่น) และพบส่วนนี้: double someValue = ... if (someValue &lt; std::numeric_limits&lt;double&gt;::epsilon() &amp;&amp; someValue &gt; -std::numeric_limits&lt;double&gt;::epsilon()) { someValue = 0.0; } ฉันพยายามที่จะคิดออกว่ามันทำให้รู้สึก เอกสารสำหรับepsilon()พูดว่า: ฟังก์ชันส่งคืนความแตกต่างระหว่าง 1 และค่าที่น้อยที่สุดที่มากกว่า 1 ที่สามารถแทนได้ [โดย double] สิ่งนี้นำไปใช้กับ 0 เช่นกันนั่นepsilon()คือค่าที่เล็กที่สุดมากกว่า 0 หรือไม่ หรือมีตัวเลขระหว่าง0และ0 + epsilonที่สามารถแทนด้วยdouble? หากไม่แสดงว่าการเปรียบเทียบนั้นไม่เทียบเท่าsomeValue == 0.0หรือไม่
214 c++  double 

10
มันจะดีกว่าใน C ++ ที่จะผ่านค่าหรือผ่านการอ้างอิงคงที่?
มันจะดีกว่าใน C ++ ที่จะผ่านค่าหรือผ่านการอ้างอิงคงที่? ฉันสงสัยว่าวิธีไหนดีกว่ากัน ฉันรู้ว่าการส่งผ่านโดยการอ้างอิงอย่างต่อเนื่องควรให้ประสิทธิภาพที่ดีขึ้นในโปรแกรมเพราะคุณไม่ได้ทำสำเนาของตัวแปร

10
คง const เทียบกับ #define
การใช้static constvars ดีกว่า#definepreprocessor หรือไม่ หรืออาจจะขึ้นอยู่กับบริบท ข้อดี / ข้อเสียของแต่ละวิธีคืออะไร?
212 c++  c  const 

22
std :: vector ช้ากว่าอาเรย์ธรรมดามากหรือไม่?
ฉันมักจะคิดว่ามันเป็นภูมิปัญญาทั่วไปที่std::vector"นำไปใช้เป็นอาร์เรย์" blah blah blah วันนี้ฉันลงไปทดสอบและดูเหมือนว่าจะไม่เป็นเช่นนั้น: นี่คือผลการทดสอบบางส่วน: UseArray completed in 2.619 seconds UseVector completed in 9.284 seconds UseVectorPushBack completed in 14.669 seconds The whole thing completed in 26.591 seconds นั่นคือช้าลงประมาณ 3 - 4 เท่า! ไม่ปรับให้เหมาะสมกับความคิดเห็นที่ " vectorอาจช้ากว่าสำหรับ nanosecs สักสองสาม" และรหัสที่ฉันใช้: #include &lt;cstdlib&gt; #include &lt;vector&gt; #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;boost/date_time/posix_time/ptime.hpp&gt; #include …
212 c++  arrays  performance  stl  vector 

17
ส่งคืนอาร์เรย์ในฟังก์ชัน
ฉันมีอาร์เรย์int arr[5]ที่ส่งผ่านไปยังฟังก์ชันfillarr(int arr[]): int fillarr(int arr[]) { for(...); return arr; } ฉันจะคืนค่าอาร์เรย์นั้นได้อย่างไร ฉันจะใช้มันอย่างไรบอกว่าฉันคืนพอยน์เตอร์ให้ฉันจะเข้าถึงได้อย่างไร?

13
เหตุใด C ++ STL จึงขึ้นอยู่กับเทมเพลตเป็นอย่างมาก (และไม่ได้อยู่ใน * อินเตอร์เฟส *)
ฉันหมายถึงนอกเหนือจากชื่อหน้าที่ (ไลบรารีเทมเพลตมาตรฐาน) ... C ++ เริ่มแรกมีจุดประสงค์เพื่อนำเสนอแนวคิดของ OOP ใน C นั่นคือ: คุณสามารถบอกได้ว่าเอนทิตีที่เฉพาะเจาะจงสามารถทำได้และไม่สามารถทำได้ องค์ประกอบของความสามารถบางอย่างยากที่จะอธิบายในลักษณะนี้เนื่องจากปัญหาของการถ่ายทอดทางพันธุกรรมที่หลากหลายและความจริงที่ว่า C ++ รองรับแนวคิดของอินเตอร์เฟสในทางที่ค่อนข้างงุ่มง่าม (เทียบกับ java และอื่น ๆ ) แต่มันมี (และอาจเป็น การปรับปรุง) จากนั้นเทมเพลตก็เข้ามาเล่นพร้อมกับ STL STL ดูเหมือนจะใช้แนวคิด OOP แบบดั้งเดิมและล้างลงในท่อระบายน้ำโดยใช้แม่แบบแทน ควรมีความแตกต่างระหว่างกรณีเมื่อแม่แบบที่ใช้ในการพูดคุยประเภทที่ชุดรูปแบบประเภทที่ไม่เกี่ยวข้องสำหรับการดำเนินงานของแม่แบบ (ภาชนะบรรจุตัวอย่างเช่น) มีvector&lt;int&gt;ความรู้สึกที่สมบูรณ์แบบ อย่างไรก็ตามในกรณีอื่น ๆ (ตัววนซ้ำและอัลกอริทึม) ประเภทของเทมเพลตควรเป็นไปตาม "แนวคิด" (อินพุต Iterator, Forward Iterator เป็นต้น ... ) ซึ่งรายละเอียดที่แท้จริงของแนวคิดถูกกำหนดโดยการนำเทมเพลตมาใช้ทั้งหมด ฟังก์ชั่น / ชั้นเรียนและไม่ตามระดับของประเภทที่ใช้กับแม่แบบซึ่งค่อนข้างต่อต้านการใช้งานของ OOP ตัวอย่างเช่นคุณสามารถบอกฟังก์ชั่น: …
211 c++  oop  templates  stl 

29
การตรวจจับ endianness โดยทางโปรแกรมในโปรแกรม C ++
มีวิธีการเขียนโปรแกรมเพื่อตรวจสอบว่าคุณอยู่ในสถาปัตยกรรมขนาดใหญ่หรือเล็กหรือไม่? ฉันต้องสามารถเขียนโค้ดที่จะทำงานบนระบบ Intel หรือ PPC และใช้รหัสเดียวกันทุกประการ (เช่นไม่มีการคอมไพล์แบบมีเงื่อนไข)


5
วิธีการส่งผ่านข้อโต้แย้งและเปลี่ยนเส้นทาง stdin จากไฟล์ไปยังโปรแกรมทำงานใน gdb?
ฉันมักจะเรียกใช้โปรแกรมเป็น: ./a.out arg1 arg2 &lt;file ฉันต้องการดีบักโดยใช้ gdb ฉันตระหนักถึงการset argsทำงาน แต่ใช้งานได้จากพรอมต์ gdb เท่านั้น
210 c++  debugging  gdb 

17
วิธีเปิดใช้งานการสนับสนุน C ++ 11 / C ++ 0x ใน Eclipse CDT
Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2 นี่คือตัวอย่างของรหัส C ++ 11: auto text = std::unique_ptr&lt;char[]&gt;(new char[len]); เอดิเตอร์ Eclipse บ่นเกี่ยวกับ: Function 'unique_ptr' could not be resolved การรวบรวม Makefile ทำงานได้ดี จะทำให้ Eclipse หยุดบ่นเกี่ยวกับข้อผิดพลาดประเภทนี้ได้อย่างไร

24
ปกป้องปฏิบัติการจากวิศวกรรมย้อนกลับ?
ฉันได้ไตร่ตรองวิธีการป้องกันรหัส C / C ++ ของฉันจากการถอดและวิศวกรรมย้อนกลับ ปกติฉันจะไม่เอาผิดพฤติกรรมนี้ในรหัสของฉัน อย่างไรก็ตามโปรโตคอลปัจจุบันที่ฉันทำงานอยู่นั้นจะต้องไม่ถูกตรวจสอบหรือเข้าใจได้เพื่อความปลอดภัยของผู้คนต่าง ๆ ตอนนี้นี่เป็นเรื่องใหม่สำหรับฉันและอินเทอร์เน็ตไม่ได้มีความเชี่ยวชาญในการป้องกันการย้อนกลับของวิศวกรรมแต่แสดงให้เห็นถึงข้อมูลมากมายเกี่ยวกับวิธีการย้อนกลับวิศวกร บางสิ่งที่ฉันคิดว่าจนถึงตอนนี้คือ: การฉีดโค้ด (การเรียกใช้ฟังก์ชันดัมมี่ก่อนและหลังการเรียกใช้ฟังก์ชันจริง) รหัส obfustication (mangles ถอดแยกชิ้นส่วนของไบนารี) เขียนกิจวัตรการเริ่มต้นของตัวเอง (ยากกว่าสำหรับผู้ debuggers ที่จะผูกไว้) void startup(); int _start() { startup( ); exit (0) } void startup() { /* code here */ } ตรวจสอบ Runtime สำหรับ debuggers (และบังคับให้ออกหากตรวจพบ) ฟังก์ชั่นแทมโพลีน void trampoline(void (*fnptr)(), bool ping …
210 c++  c  obfuscation  assembly 

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