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

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

10
นิพจน์ตัวชี้: * ptr ++, * ++ ptr และ ++ * ptr
เมื่อเร็ว ๆ นี้ฉันพบปัญหานี้ซึ่งฉันไม่สามารถเข้าใจได้ด้วยตัวเอง ทำอะไรที่สามเหล่านี้แสดงออกจริงๆหมายถึง? *ptr++ *++ptr ++*ptr ฉันได้ลอง Ritchie แล้ว แต่น่าเสียดายที่ไม่สามารถทำตามสิ่งที่เขาบอกเกี่ยวกับปฏิบัติการทั้ง 3 นี้ได้ ฉันรู้ว่าพวกเขาทั้งหมดทำเพื่อเพิ่มตัวชี้ / ค่าที่ชี้ไป ฉันยังเดาได้ว่าอาจมีหลายสิ่งหลายอย่างเกี่ยวกับลำดับความสำคัญและลำดับของการประเมินผล เช่นเดียวกับการเพิ่มตัวชี้หนึ่งครั้งก่อนจากนั้นดึงเนื้อหาของตัวชี้นั้นตัวหนึ่งก็ดึงเนื้อหาจากนั้นจึงเพิ่มตัวชี้เป็นต้นอย่างที่คุณเห็นฉันไม่มีความเข้าใจที่ชัดเจนเกี่ยวกับการทำงานจริงของตัวชี้ซึ่งฉันต้องการ ชัดเจนโดยเร็วที่สุด แต่ฉันหลงทางอย่างแท้จริงเมื่อมีโอกาสสมัครเข้าโปรแกรม ตัวอย่างเช่น: int main() { const char *p = "Hello"; while(*p++) printf("%c",*p); return 0; } ให้ผลลัพธ์นี้แก่ฉัน: ello แต่ความคาดหวังของฉันคือมันจะพิมพ์ออกHelloมา คำขอสุดท้าย - โปรดยกตัวอย่างการทำงานของแต่ละนิพจน์ในข้อมูลโค้ดที่กำหนด ส่วนใหญ่แล้วมีเพียงย่อหน้าของทฤษฎีเท่านั้นที่ลอยอยู่เหนือหัวของฉัน
128 c++  c  pointers  increment 

1
จะเกิดอะไรขึ้นกับตัวแปรส่วนกลางและตัวแปรคงที่ในไลบรารีที่ใช้ร่วมกันเมื่อมีการเชื่อมโยงแบบไดนามิก
ฉันกำลังพยายามทำความเข้าใจว่าเกิดอะไรขึ้นเมื่อโมดูลที่มี globals และตัวแปรคงที่เชื่อมโยงกับแอปพลิเคชันแบบไดนามิก ตามโมดูลฉันหมายถึงแต่ละโครงการในโซลูชัน (ฉันทำงานกับสตูดิโอภาพเยอะมาก!) โมดูลเหล่านี้มีอยู่ในตัว * .lib หรือ * .dll หรือตัว * .exe เอง ฉันเข้าใจว่าไบนารีของแอปพลิเคชันมีข้อมูลส่วนกลางและแบบคงที่ของหน่วยการแปลแต่ละหน่วย (ไฟล์ออบเจ็กต์) ในส่วนข้อมูล (และอ่านเฉพาะส่วนข้อมูลหาก const) จะเกิดอะไรขึ้นเมื่อแอปพลิเคชันนี้ใช้โมดูล A ที่มีการเชื่อมโยงแบบไดนามิกในเวลาโหลด ฉันถือว่า DLL มีส่วนสำหรับโลกและสถิตยศาสตร์ ระบบปฏิบัติการโหลดหรือไม่ ถ้าเป็นเช่นนั้นจะโหลดไปที่ใด และจะเกิดอะไรขึ้นเมื่อแอปพลิเคชันใช้โมดูล B พร้อมการเชื่อมโยงแบบไดนามิกรันไทม์ หากฉันมีโมดูลสองโมดูลในแอปพลิเคชันของฉันที่ทั้งสองใช้ A และ B สำเนาของโลกของ A และ B จะถูกสร้างขึ้นตามที่ระบุไว้ด้านล่าง (หากเป็นกระบวนการที่แตกต่างกัน) DLLs A และ B สามารถเข้าถึงแอปพลิเคชัน globals ได้หรือไม่ (โปรดระบุเหตุผลของคุณด้วย) อ้างจากMSDN …

12
ทำไมไม่ลบตั้งค่าตัวชี้เป็น NULL?
ฉันสงสัยเสมอว่าทำไมการตั้งค่าตัวชี้เป็น NULL โดยอัตโนมัติหลังจากลบไม่ได้เป็นส่วนหนึ่งของมาตรฐาน หากได้รับการดูแลแล้วข้อขัดข้องจำนวนมากเนื่องจากตัวชี้ที่ไม่ถูกต้องจะไม่เกิดขึ้น แต่ต้องบอกว่าฉันคิดได้ว่าทำไมมาตรฐานถึง จำกัด สิ่งนี้: ประสิทธิภาพ: คำแนะนำเพิ่มเติมอาจทำให้deleteประสิทธิภาพช้าลง อาจเป็นเพราะพconstอยน์เตอร์ จากนั้นอีกครั้งมาตรฐานอาจทำอะไรบางอย่างสำหรับกรณีพิเศษนี้ฉันเดา ไม่มีใครรู้เหตุผลที่แน่นอนที่ไม่อนุญาตให้ทำเช่นนี้?

7
จะเกิดอะไรขึ้นถ้าฉันกำหนดอาร์เรย์ขนาด 0 ใน C / C ++
แค่อยากรู้ว่าจะเกิดอะไรขึ้นถ้าฉันกำหนดอาร์เรย์ที่มีความยาวเป็นศูนย์int array[0];ในโค้ด? GCC ไม่บ่นเลย โปรแกรมตัวอย่าง #include <stdio.h> int main() { int arr[0]; return 0; } การอธิบาย ฉันกำลังพยายามหาว่าอาร์เรย์ที่มีความยาวเป็นศูนย์เริ่มต้นด้วยวิธีนี้แทนที่จะชี้ไปที่ความยาวตัวแปรในความคิดเห็นของ Darhazer นั้นได้รับการปรับให้เหมาะสมหรือไม่ นี่เป็นเพราะฉันต้องปล่อยโค้ดบางส่วนออกไปในป่าดังนั้นฉันจึงพยายามคิดว่าฉันต้องจัดการกับกรณีที่SIZEถูกกำหนดไว้0หรือไม่ซึ่งเกิดขึ้นในบางรหัสที่มีการกำหนดแบบคงที่int array[SIZE]; ฉันรู้สึกประหลาดใจจริงๆที่ GCC ไม่บ่นซึ่งนำไปสู่คำถามของฉัน จากคำตอบที่ฉันได้รับฉันเชื่อว่าการไม่มีคำเตือนส่วนใหญ่เกิดจากการรองรับโค้ดเก่าซึ่งไม่ได้รับการอัปเดตด้วยไวยากรณ์ [] ใหม่ เนื่องจากฉันสงสัยเกี่ยวกับข้อผิดพลาดเป็นหลักฉันจึงติดแท็กคำตอบของ Lundin ว่าถูกต้อง (ของ Nawaz เป็นครั้งแรก แต่ยังไม่สมบูรณ์เท่าที่ควร) คนอื่น ๆ ชี้ให้เห็นถึงการใช้งานจริงสำหรับโครงสร้างเบาะท้ายในขณะที่เกี่ยวข้องนั้นไม่ได้ สิ่งที่ฉันกำลังมองหา
127 c++  c  arrays 

1
สุดยอด C ++ Code Formatter / Beautifier
ล็อค คำถามนี้และคำตอบถูกล็อกเนื่องจากคำถามไม่ตรงประเด็น แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ยังไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ มีเครื่องมือจัดรูปแบบซอร์สโค้ดมากมายอยู่ที่นั่น ตัวไหนทำงานได้ดีที่สุดสำหรับ C ++ ฉันสนใจเครื่องมือบรรทัดคำสั่งหรือสิ่งอื่น ๆ ที่สามารถเรียกใช้โดยอัตโนมัติเมื่อตรวจสอบโค้ดเข้า / ออกโดยไม่จำเป็นต้องเปิดตัวแก้ไขหรือ IDE (หากคุณเห็นรายการที่คุณชอบอยู่แล้วแสดงเป็นคำตอบให้โหวตหากไม่มีให้เพิ่ม)

4
ลิงค์เกอร์ทำอะไร?
ฉันสงสัยมาตลอด ฉันรู้ว่าคอมไพเลอร์แปลงโค้ดที่คุณเขียนเป็นไบนารี แต่ลิงก์เกอร์จะทำอย่างไร พวกเขาเป็นปริศนาสำหรับฉันมาตลอด ฉันเข้าใจคร่าวๆว่า 'การเชื่อมโยง' คืออะไร เมื่อมีการเพิ่มการอ้างอิงถึงไลบรารีและเฟรมเวิร์กลงในไบนารี ฉันไม่เข้าใจอะไรที่นอกเหนือไปจากนั้น สำหรับฉันมัน "ใช้ได้" ฉันยังเข้าใจพื้นฐานของการเชื่อมโยงแบบไดนามิก แต่ไม่มีอะไรลึกซึ้งเกินไป ใครช่วยอธิบายเงื่อนไข

7
วิธีใช้นาฬิกา () ใน C ++
ฉันจะโทรclock()เข้าได้C++อย่างไร? ตัวอย่างเช่นฉันต้องการทดสอบว่าการค้นหาเชิงเส้นใช้เวลาเท่าใดในการค้นหาองค์ประกอบที่กำหนดในอาร์เรย์
127 c++  benchmarking  clock 

3
เงื่อนไขสำหรับการสร้าง ctor เริ่มต้น / คัดลอก / ย้ายอัตโนมัติและตัวดำเนินการกำหนดสำเนา / ย้าย?
ฉันต้องการรีเฟรชหน่วยความจำของฉันตามเงื่อนไขที่คอมไพลเลอร์มักสร้างตัวสร้างเริ่มต้นตัวสร้างการคัดลอกและตัวดำเนินการกำหนดโดยอัตโนมัติ ฉันจำได้ว่ามีกฎบางอย่าง แต่ฉันจำไม่ได้และยังไม่พบแหล่งข้อมูลที่มีชื่อเสียงทางออนไลน์ ใครสามารถช่วย?

7
ฉันควรคอมไพล์ด้วย / MD หรือ / MT?
ใน Visual Studio มีแฟล็กคอมไพล์ / MD และ / MT ซึ่งให้คุณเลือกประเภทของไลบรารีรันไทม์ C ที่คุณต้องการ ฉันเข้าใจความแตกต่างในการใช้งาน แต่ฉันยังไม่แน่ใจว่าจะใช้อันไหนดี ข้อดี / ข้อเสียคืออะไร? ข้อดีอย่างหนึ่งของ / MD ที่ฉันเคยได้ยินมาคือสิ่งนี้ช่วยให้ผู้อื่นอัปเดตรันไทม์ได้ (เช่นอาจจะแก้ไขปัญหาด้านความปลอดภัย) และแอปของฉันจะได้รับประโยชน์จากการอัปเดตนี้ แม้ว่าสำหรับฉันแล้วสิ่งนี้ดูเหมือนจะไม่ใช่ฟีเจอร์: ฉันไม่ต้องการให้คนอื่นเปลี่ยนรันไทม์โดยไม่อนุญาตให้ฉันทดสอบกับเวอร์ชันใหม่! บางสิ่งที่ฉันอยากรู้เกี่ยวกับ: สิ่งนี้จะส่งผลต่อเวลาในการสร้างอย่างไร (น่าจะ / MT ช้ากว่านิดหน่อย?) ความหมายอื่น ๆ คืออะไร? คนส่วนใหญ่ใช้อันไหน?

8
มีวิธีระบุจำนวนอักขระของสตริงที่จะพิมพ์โดยใช้ printf () หรือไม่?
มีวิธีระบุจำนวนอักขระของสตริงที่จะพิมพ์ออกมา (คล้ายกับตำแหน่งทศนิยมในints) หรือไม่? printf ("Here are the first 8 chars: %s\n", "A string that is more than 8 chars"); ต้องการให้พิมพ์: Here are the first 8 chars: A string
127 c++  c  printf 

4
เมื่อใดที่จะสร้างประเภทที่ไม่สามารถเคลื่อนย้ายได้ใน C ++ 11
ฉันแปลกใจที่สิ่งนี้ไม่ปรากฏในผลการค้นหาของฉันฉันคิดว่ามีคนถามเรื่องนี้มาก่อนเนื่องจากประโยชน์ของความหมายการย้ายใน C ++ 11: เมื่อใดที่ฉันต้อง (หรือเป็นความคิดที่ดีสำหรับฉัน) ทำให้คลาสไม่สามารถเคลื่อนย้ายได้ใน C ++ 11 (เหตุผลอื่นนอกเหนือจากปัญหาความเข้ากันได้กับรหัสที่มีอยู่นั่นคือ)

12
เหตุใดบูลีน 1 ไบต์และไม่ใช่ขนาด 1 บิต
ใน C ++ เหตุใดบูลีน 1 ไบต์และไม่ใช่ขนาด 1 บิต ทำไมไม่มีประเภทเช่นจำนวนเต็ม 4 บิตหรือ 2 บิต ฉันพลาดสิ่งต่างๆข้างต้นเมื่อเขียนโปรแกรมจำลองสำหรับ CPU

8
วิธีการทำซ้ำสตริงตัวแปรหลายครั้งใน C ++?
ฉันต้องการแทรกช่องว่าง 'n' (หรือสตริงใด ๆ ) ที่จุดเริ่มต้นของสตริงใน C ++ มีวิธีโดยตรงในการดำเนินการโดยใช้ std :: strings หรือ char * strings หรือไม่ เช่นใน Python คุณสามารถทำได้ >>> "." * 5 + "lolcat" '.....lolcat'
127 c++ 

8
อธิบายการข้ามต้นไม้ตามลำดับของมอร์ริสโดยไม่ต้องใช้สแต็คหรือการเรียกซ้ำ
ใครช่วยกรุณาช่วยฉันทำความเข้าใจอัลกอริทึมการเดินทางข้ามต้นไม้ตามลำดับมอร์ริสต่อไปนี้โดยไม่ต้องใช้สแต็กหรือการเรียกซ้ำ ฉันพยายามเข้าใจว่ามันทำงานอย่างไร แต่มันก็หนีฉันไป 1. Initialize current as root 2. While current is not NULL If current does not have left child a. Print current’s data b. Go to the right, i.e., current = current->right Else a. In current's left subtree, make current the right child of the rightmost node b. …

4
ถาม: ฉันจะจัดการกับเหตุการณ์ที่ผู้ใช้กดปุ่ม 'X' (ปิด) ได้อย่างไร?
ฉันกำลังพัฒนาแอปพลิเคชันโดยใช้ Qt ฉันไม่ทราบว่าช่องใดที่สอดคล้องกับเหตุการณ์ของ "ผู้ใช้คลิกปุ่ม 'X' (ปิด) ของกรอบหน้าต่าง" นั่นคือปุ่มนี้: หากไม่มีช่องนี้ใครช่วยแนะนำวิธีการอื่นให้ฉันด้วยซึ่งฉันสามารถเริ่มฟังก์ชันได้หลังจากที่ผู้ใช้กดปุ่มปิดนั้น
126 c++  qt 

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