0Pricing
C++ Academy · บทเรียน

การแปลงชนิด

remove_const, decay และอื่น ๆ

การแปลงชนิด เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

การแปลงประเภท

นอกจากใช้สอบถามแล้ว <type_traits> ยังสามารถ สร้างประเภทใหม่จากประเภทเดิมได้ คุณลักษณะเหล่านี้เปิดเผยประเภทสมาชิก ::type และมีทางลัด _t ตั้งแต่ C++14 ขึ้นไป

การลบตัวระบุค่าคงที่

std::remove_const_t<const int> ให้ผลเป็น int ซึ่งมีประโยชน์เมื่อคุณต้องการประเภทที่แก้ไขค่าได้

#include <iostream>
#include <type_traits>

int main() {
    using T = std::remove_const_t<const int>;
    std::cout << std::is_same_v<T, int> << "\n";
    return 0;
}

การลบการอ้างอิง

std::remove_reference_t<int&> ให้ผลเป็น int สิ่งนี้เป็นพื้นฐานสำคัญของการส่งต่ออย่างสมบูรณ์และการเขียนโค้ดทั่วไป

#include <iostream>
#include <type_traits>

int main() {
    using T = std::remove_reference_t<int&>;
    std::cout << std::is_same_v<T, int> << "\n";
    return 0;
}

การเพิ่มตัวชี้และตัวระบุค่าคงที่

การแปลงยังสามารถเพิ่มตัวกำกับได้

  • add_const_t<int> = const int
  • add_pointer_t<int> = int*
#include <iostream>
#include <type_traits>

int main() {
    using P = std::add_pointer_t<int>;
    std::cout << std::is_same_v<P, int*> << "\n";
    return 0;
}

การเสื่อมสภาพของประเภท

std::decay_t<T> เลียนแบบการแปลงที่เกิดขึ้นเมื่อส่งค่าแบบส่งตามค่า โดยจะตัดการอ้างอิงและตัวกำกับ cv ออก และแปลงอาร์เรย์หรือฟังก์ชันเป็นตัวชี้

#include <iostream>
#include <type_traits>

int main() {
    using T = std::decay_t<const int&>;
    std::cout << std::is_same_v<T, int> << "\n";
    return 0;
}

การเสื่อมสภาพของอาร์เรย์

การเสื่อมสภาพจะแปลงประเภทอาร์เรย์เป็นตัวชี้ เหมือนกับการส่งอาร์เรย์ให้ฟังก์ชันทุกประการ

#include <iostream>
#include <type_traits>

int main() {
    using T = std::decay_t<int[5]>;
    std::cout << std::is_same_v<T, int*> << "\n";
    return 0;
}

การลบตัวกำกับ cv

std::remove_cv_t<const volatile int> จะตัดทั้ง const และ volatile ออก ทำให้ได้ int ธรรมดา

#include <iostream>
#include <type_traits>

int main() {
    using T = std::remove_cv_t<const volatile int>;
    std::cout << std::is_same_v<T, int> << "\n";
    return 0;
}

ประเภทที่ใช้ร่วมกัน

std::common_type_t<A,B> ให้ประเภทที่ทั้งสองประเภทสามารถแปลงไปหาได้ เช่นเดียวกับผลลัพธ์ของ a + b

#include <iostream>
#include <type_traits>

int main() {
    using T = std::common_type_t<int, double>;
    std::cout << std::is_same_v<T, double> << "\n";
    return 0;
}

ประเภทพื้นฐาน

สำหรับประเภทแจกแจง std::underlying_type_t<E> จะแสดงประเภทจำนวนเต็มที่อยู่เบื้องหลังประเภทแจกแจงนั้น

#include <iostream>
#include <type_traits>

enum class Color : unsigned char { Red, Green };

int main() {
    using U = std::underlying_type_t<Color>;
    std::cout << std::is_same_v<U, unsigned char> << "\n";
    return 0;
}

การต่อการแปลงหลายขั้น

การแปลงสามารถนำมาประกอบกันได้ หากต้องการปรับประเภทที่ส่งต่อให้เป็นมาตรฐาน คุณมักจะผสานหลายรายการเข้าด้วยกัน เช่น remove_cv_t<remove_reference_t<T>> ซึ่งโดยพื้นฐานแล้วเป็นสิ่งที่การเสื่อมสภาพเริ่มต้นทำ

เหตุใดการแปลงจึงสำคัญ

ฟังก์ชันทั่วไปมักได้รับ const T& หรือ T&& แต่จำเป็นต้องใช้ประเภทพื้นฐานเพื่อประกาศตัวแปรภายในหรือค่าที่ส่งคืน คุณลักษณะการแปลงช่วยให้ได้ประเภทที่สะอาดและเหมาะสม

ตรวจสอบความเข้าใจ

ทบทวนว่าการเสื่อมสภาพทำอะไร

สรุปทบทวน

คุณได้เรียนรู้การแปลงประเภท

  • คุณลักษณะเปิดเผย ::type พร้อมทางลัด _t
  • remove_const, remove_reference, remove_cv
  • add_pointer, add_const, decay
  • common_type, underlying_type สำหรับผลลัพธ์ที่ได้จากการอนุมาน

คำถามที่พบบ่อย

บทเรียน “การแปลงชนิด” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การแปลงชนิด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การแปลงชนิด”

remove_const, decay และอื่น ๆ คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การแปลงชนิด” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม

ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การสอบถามชนิด
  2. การแปลงชนิด
  3. ตรรกะตามเงื่อนไข
  4. การเขียน traits แบบกำหนดเอง
← กลับไปที่ C++ Academy