Conversion using Cast operator

ในภาษา C++ มีการเพิ่มคำสั่งสำหรับแปลงข้อมูล 4 แบบ คือ static_cast dynamic_cast reinterpret_cast และ const_cast เพื่อทำให้การแปลงมีประสิทธิภาพมากขึ้น

Static_cast

Static_cast ใช้ในการแปลงตัวแปรพื้นฐาน สามารถแปลง type ได้เหมือนกันกับ c-style และ function-style แต่ static_cast จะเกิด error เมื่อต้องการแปลงค่า address ประเภทหนึ่งไปยังตัวแปร pointor ประเภทอื่น ตัวอย่าง เช่น การแปลงค่า adress ประเภท char ไปเป็น int* ดังตัวอย่าง ที่2 แต่สามารถแปลง address ประเภทเดียวกันกับ pointor ไปเป็น pointor ได้

/*.................Ex. int converted to char type.....................*/

#include <iostream>
using namespace std;
int main() {
int num[2];
cin>>num[0]>>num[1]>>num[2];
cout<<" char C = "<< (char)num[0]<<" "<<(char)num[1] <<" "<<(char)num[2]<<endl;

// for(int i=0;i<3;i++){
// cin>>num[i];
// }
// cout<<"num = ";
// for(int j=0;j<3;j++){
// cout<<(char)num[j];
// }
//cout<<endl;

}

จากตัวอย่างที่2 การใช้ static_cast โดยการแปลง ค่า address จาก ตัวแปร char ให้เป็นค่า int* จะไม่สามารถทำได้


/*...................Ex.2 static_cast ........................

Referance code from website : https://www.geeksforgeeks.org/static_cast-in-c-type-casting-operators/
*/
#include <iostream>
using namespace std;
int main() {
    int a = 10; 
    char c = 'a'; 
  
//  //address &c convert an int pointer *q  with c-type cast. it is pass at compile time, pass at run time
    
//   int *q = (int *)&c;  
//   cout<<" address &c convert an int pointer *q  with c-type cast = "<<*q <<endl ;
    
    //address &c convert an int pointer *q  with static_cast pass at compile time, may fail at run time 
    int *q = static_cast<int*>(&c); 
    cout<<" address &c convert an int pointer *q  with static_cast = "<<*q <<endl ;
    
    /* run coed ./Ex2_static_cast
    output error complie time
    
    error: invalid static_cast from type ‘char*’ to type ‘int*’
    int* p = static_cast<int*>(&c); */
}

/*    ex3*/
// https://qastack.in.th/programming/2253168/dynamic-cast-and-static-cast-in-c
#include <iostream> 
#include <string> 
using namespace std; 
class B {};
class D : public B {};
class X {};
int main()
{
  D* d = new D;
  B* b = static_cast<B*>(d); // this works
  cout<< b<<endl;
 // X* x = static_cast<X*>(d); // ERROR - Won't compile
  return 0;
}

Last updated

Assoc. Prof. Wiroon Sriborrirux, Founder of Advance Innovation Center (AIC) and Bangsaen Design House (BDH), Electrical Engineering Department, Faculty of Engineering, Burapha University