หน้าแรก
หน้าแรก
ความแตกต่างระหว่างทั้งสองรูปแบบอยู่ในตำแหน่งที่ตัวประมวลผลล่วงหน้าค้นหาไฟล์ที่จะรวมไว้ #include ตัวประมวลผลล่วงหน้าค้นหาในลักษณะที่ขึ้นกับการใช้งาน โดยจะค้นหาไดเรกทอรีที่คอมไพเลอร์กำหนดไว้ล่วงหน้า วิธีนี้มักใช้เพื่อรวมไฟล์ส่วนหัวของไลบรารีมาตรฐาน #include ชื่อไฟล์ ตัวประมวลผลล่วงหน้าจะค้นหาในได
อาร์เรย์ 2 มิติแบบไดนามิกนั้นเป็นอาร์เรย์ของพอยน์เตอร์ไปยังอาร์เรย์ ดังนั้น ก่อนอื่นคุณต้องเริ่มต้นอาร์เรย์ของพอยน์เตอร์ไปยังพอยน์เตอร์ จากนั้นจึงเริ่มต้นอาร์เรย์ 1d แต่ละอันในลูป ตัวอย่าง #include<iostream> using namespace std; int main() { int rows = 3, cols = 4; i
ต้องสร้างอาร์เรย์ขนาดใหญ่ที่เป็นไปได้บนสแต็ก ซึ่งโดยทั่วไปจะมีพื้นที่ว่างเพียงเล็กน้อยก็ไม่ดี หากคุณทราบขนาดล่วงหน้า คุณสามารถใช้อาร์เรย์แบบคงที่ได้ และถ้าคุณไม่ทราบขนาดล่วงหน้า คุณจะต้องเขียนโค้ดที่ไม่ปลอดภัย ไม่สามารถรวมอาร์เรย์ที่มีความยาวผันแปรได้ในภาษา C++ เนื่องจากจะต้องมีการเปลี่ยนแปลงครั้งให
กฎสามข้อเป็นกฎง่ายๆ เมื่อใช้ C++ นี่เป็นแนวปฏิบัติที่ดีที่บอกว่าถ้าชั้นเรียนของคุณต้องการสิ่งใด ตัวสร้างการคัดลอก ผู้ดำเนินการมอบหมาย หรือผู้ทำลาย กำหนดไว้อย่างชัดเจนจึงมีแนวโน้มว่าจะต้องใช้ทั้งสามอย่าง ทำไมถึงเป็นเช่นนี้? เป็นเพราะถ้าชั้นเรียนของคุณต้องการสิ่งใดๆ ข้างต้น มันคือการจัดการทรัพยากร
มีการใช้กฎห้าข้อใน C++ สำหรับการจัดการทรัพยากร การจัดการทรัพยากรทำให้ไคลเอ็นต์ไม่ต้องกังวลเกี่ยวกับอายุการใช้งานของออบเจ็กต์ที่มีการจัดการ ซึ่งอาจช่วยลดการรั่วไหลของหน่วยความจำและปัญหาอื่นๆ ในโค้ด C++ แต่การจัดการนี้มีค่าใช้จ่าย กฎของ The Big Five ระบุว่า หากคุณต้องเขียนหนึ่งในหน้าที่ต่อไปนี้ คุณต้อ
C++98 เป็นรุ่นแรกของมาตรฐาน C++ ได้กำหนดโครงสร้างภาษาพื้นฐานทั้งหมด STL และไลบรารีมาตรฐาน C++03 เป็นการแก้ไขมาตรฐานครั้งต่อไป นี่ถือเป็นการแก้ไขจุดบกพร่องสำหรับมาตรฐานโดยหลักๆ แล้ว เนื่องจากมีการแก้ไขรายงานข้อบกพร่องของภาษาหลัก 92 ฉบับ รายงานข้อบกพร่องของไลบรารี 125 รายการ และรวมคุณลักษณะภาษาใหม่เพ
โดยสังเขป ตำแหน่งใหม่ช่วยให้คุณสามารถ สร้าง วัตถุในหน่วยความจำที่จัดสรรให้กับตัวแปรที่กำหนดแล้ว สิ่งนี้มีประโยชน์สำหรับการปรับให้เหมาะสม เนื่องจากจะเร็วกว่าที่จะไม่จัดสรรและนำหน่วยความจำเดิมกลับมาใช้ใหม่ซึ่งถูกกำหนดไว้แล้ว สามารถใช้ได้ดังนี้ − new (address) (type) initializer เราสามารถระบุที่อยู่ที่
มาตรฐาน C++ และ C มักจะตั้งชื่อตามปีที่มีการเผยแพร่ ตัวอย่างเช่น ใน C++ มาตรฐานดั้งเดิมได้รับการเผยแพร่ในปี 1998 ดังนั้นจึงเรียกว่า C++98 และการแก้ไขครั้งแรกซึ่งเผยแพร่ในปี 2546 เรียกว่า C++03 สำหรับการแก้ไขครั้งต่อไป คาดว่ามาตรฐานถัดไปหลังจากนั้นจะเสร็จสิ้นภายในปี 2008 แต่เนื่องจากความไม่แน่นอน จึง
GNU C++ คอมไพเลอร์ g++ ให้ส่วนขยายกับภาษา C++ ความแตกต่างระหว่างสองตัวเลือกคือไม่ว่าจะเปิดใช้งานส่วนขยาย GNU ที่อาจละเมิดมาตรฐาน C ++ หรือไม่ โปรดทราบว่าส่วนขยายบางรายการยังคงมีผลเมื่อใช้ -std =c++11 หากไม่ละเมิดมาตรฐาน รายการส่วนขยายของภาษา C++ ในคอมไพเลอร์ GNU สามารถพบได้ที่นี่ - https://gcc.gnu.o
GCC รองรับภาษาถิ่นที่แตกต่างกันของ C++ ซึ่งสอดคล้องกับมาตรฐาน ISO ที่เผยแพร่หลายฉบับ สามารถเลือกมาตรฐานใดได้โดยใช้ตัวเลือกบรรทัดคำสั่ง -std= C++98 − GCC รองรับมาตรฐาน 1998 C++ อย่างเต็มรูปแบบตามที่แก้ไขในปี 2546 และเปลี่ยนชื่อเป็น C++03 และรายงานข้อบกพร่องบางฉบับในภายหลัง C++11 − GCC 4.8.1 เป็นการ
C++11 เป็นมาตรฐาน C++ สมัยใหม่ที่เผยแพร่ในปี 2011 ซึ่งทำให้มีส่วนขยายและการปรับปรุงที่สำคัญมากมายสำหรับภาษาที่มีอยู่ ต่อไปนี้คือการเปลี่ยนแปลง/ส่วนเพิ่มเติมที่สำคัญของ C++11 - รายการตัวเริ่มต้น การหักแบบอัตโนมัติ การอ้างอิงค่า Rvalue และตัวสร้างการย้าย constexpr – นิพจน์คงที่ทั่วไป การปรับเปลี่ยนคำ
C++11 เป็นมาตรฐาน C++ สมัยใหม่ที่เผยแพร่ในปี 2011 ซึ่งทำให้เกิดส่วนขยายและการปรับปรุงที่สำคัญมากมายสำหรับภาษาที่มีอยู่ ได้รับการอนุมัติจาก International Organization for Standardization (ISO) เมื่อวันที่ 12 สิงหาคม 2011 และแทนที่ C++03 C++11 เรียกอีกอย่างว่า C++0x ทั้งนี้เป็นเพราะ สำหรับการแก้ไขครั้
POD เป็นตัวย่อในภาษา C++ ซึ่งหมายถึงข้อมูลเก่าธรรมดา เป็นคลาส/โครงสร้างที่มีเฉพาะตัวแปรสมาชิก และไม่มีเมธอด ตัวสร้าง ตัวทำลาย ฟังก์ชันเสมือน ฯลฯ ตัวอย่างเช่น ตัวอย่าง #include<iostream> using namespace std; // POD struct MyStruct { int key; string data; }; int main(
C++ STL มีฟังก์ชันทั่วไปที่เป็นประโยชน์ เช่น std::for_each น่าเสียดายที่พวกเขาสามารถใช้งานได้ค่อนข้างยุ่งยาก โดยเฉพาะอย่างยิ่งหาก functor ที่คุณต้องการใช้นั้นไม่ซ้ำกับฟังก์ชันเฉพาะ ดังนั้นฟังก์ชันที่คุณจะสร้างนี้จะอยู่ในเนมสเปซนั้นเพียงแค่ถูกใช้ในที่เดียว วิธีแก้ไขคือใช้ฟังก์ชันที่ไม่ระบุตัวตน C++ ไ
POD เป็นตัวย่อในภาษา C++ ซึ่งหมายถึงข้อมูลเก่าธรรมดา เป็นคลาส/โครงสร้างที่มีเฉพาะตัวแปรสมาชิก และไม่มีเมธอด ตัวสร้าง ตัวทำลาย ฟังก์ชันเสมือน ฯลฯ ตัวอย่างเช่น ตัวอย่าง #include<iostream> using namespace std; // POD struct MyStruct { int key; string data; }; int main()
มาตรฐาน C++ ไม่ได้ระบุขนาดของประเภทอินทิกรัลเป็นไบต์ ระบุช่วงขั้นต่ำที่ประเภทเหล่านี้ต้องสามารถถือได้ ขนาดเป็นบิตสามารถหาได้ง่ายจากช่วงต่ำสุดที่ระบุ ไม่ได้หมายถึงมาตรฐาน แต่ขนาดที่ใช้กันทั่วไปสำหรับแพลตฟอร์มต่างๆ คือ − สำหรับระบบ 32 บิต มาตรฐานคือ ILP32 นั่นคือ int ยาว และพอยน์เตอร์คือปริมาณ 32 บิ
นี่เป็นเพราะความจริงที่ว่า C++ ไม่ได้ทำการตรวจสอบขอบเขต ภาษาเช่น Java และ python มีการตรวจสอบขอบเขต ดังนั้นหากคุณพยายามเข้าถึงองค์ประกอบที่อยู่นอกขอบเขต จะเกิดข้อผิดพลาด หลักการออกแบบ C++ คือไม่ควรช้ากว่าโค้ด C ที่เทียบเท่ากัน และ C จะไม่ทำการตรวจสอบขอบเขตอาร์เรย์ ดังนั้น หากคุณพยายามเข้าถึงหน่วยควา
มีสี่วิธีในการส่งผ่านวัตถุไปยังฟังก์ชัน สมมติว่าคุณมีคลาส X และต้องการส่งต่อไปยังฟังก์ชันที่สนุก − ผ่านตามค่า สิ่งนี้จะสร้างสำเนาเฉพาะของวัตถุในขอบเขตของฟังก์ชัน สิ่งที่คุณแก้ไขที่นี่จะไม่ปรากฏในวัตถุที่ส่งผ่าน ตัวอย่างเช่น ประกาศ void fun(X x); การโทร X x; fun(x); ผ่านโดยการอ้างอิง สิ่งนี
วิธีเดียวที่ปลอดภัยคือการตรวจสอบการล้นก่อนที่จะเกิดขึ้น มีวิธีแฮ็กในการตรวจสอบจำนวนเต็มล้นแม้ว่า ดังนั้น หากคุณกำลังตั้งเป้าที่จะตรวจจับโอเวอร์โฟลว์ในส่วนเสริมที่ไม่ได้ลงนาม คุณสามารถตรวจสอบว่าผลลัพธ์นั้นน้อยกว่ามูลค่าเพิ่มหรือไม่ ตัวอย่างเช่น unsigned int x, y; unsigned int value = x + y; bool over
จุดประสงค์ของตัวดำเนินการจุลภาคคือการรวมนิพจน์หลายนิพจน์เข้าด้วยกัน ค่าของรายการนิพจน์ที่คั่นด้วยเครื่องหมายจุลภาคคือค่าของนิพจน์ทางขวาสุด ผลของจุลภาคคือการอนุญาตให้ดำเนินการได้ตามลำดับ ค่าของนิพจน์อื่นๆ จะถูกยกเลิก ซึ่งหมายความว่านิพจน์ทางด้านขวาจะกลายเป็นค่าของนิพจน์ที่คั่นด้วยเครื่องหมายจุลภาคทั้