การแปลงชนิด
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 intadd_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_cvadd_pointer,add_const,decaycommon_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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ