C에서의 유형 변환:
처음부터 시작해야 합니다. C 언어는 강력하고 단순하기 때문에 C와 유사한 유형 변환을 사용하는 데 익숙합니다.
주로 두 가지 형식이 있습니다.
(new-type) 표현식
new-type (expression)
C 스타일 변환 형식은 매우 간단하지만 많은 단점이 있습니다:
1. 변환이 너무 무작위적이고 어디서나 수행할 수 있습니다. 유형 간 변환. const 개체에 대한 포인터를 const가 아닌 개체에 대한 포인터로 변환하고, 기본 클래스 개체에 대한 포인터를 파생 클래스 개체에 대한 포인터로 변환할 수 있습니다. 이러한 변환 간의 차이는 매우 크지만 기존 C 언어에서는 그렇습니다. -style 캐스트는 이들을 구별하지 않습니다.
2.C 스타일 변환에는 통일된 키워드와 식별자가 없습니다. 대규모 시스템의 경우 코드 문제 해결을 수행할 때 놓치거나 무시하기 쉽습니다.
C++의 유형 변환:
C++ 스타일은 위의 두 가지 문제를 완벽하게 해결합니다. 1. 유형 변환은 세분화되어 있으며 서로 다른 요구 사항에 따른 변환을 지원하기 위해 4가지 유형의 변환이 제공됩니다. 2. 유형 변환에는 통합 식별자가 있어 코드 문제 해결 및 검사에 편리합니다. 아래에는 네 가지 변환이 소개되어 있습니다: static_cast, Dynamic_cast, const_cast 및 reinterpreter_cast.
static_cast, 이름 지정은 정적 유형 변환으로 이해됩니다. int를 char로 변환하는 것과 같습니다.
dynamic_cast, 명명은 동적 유형 변환으로 이해됩니다. 하위 클래스와 상위 클래스 간의 다형성 유형 변환과 같은 것입니다.
const_cast는 문자 그대로 const 속성을 제거하는 것을 의미합니다.
reinterpreter_cast는 유형을 재해석만 하고 이진 변환을 수행하지 않습니다.
1. static_cast 변환
1. 기본 사용법 : static_cast 표현식
2. 사용 시나리오 :
a. 클래스 계층 구조에서 기본 클래스와 파생 클래스 간의 포인터 또는 참조에 사용됩니다. 변환
상향 변환(파생 클래스 --> 기본 클래스)은 안전합니다.
하향 변환(기본 클래스 --> 파생 클래스)은 동적 유형 검사가 없기 때문에 안전하지 않습니다.
b. int를 char로 변환하는 등 기본 데이터 유형 간 변환에 사용됩니다. 이는 보안 문제를 가져오며 프로그래머가 이를 보장해야 합니다
c. 널 포인터를 대상 유형의 널 포인터로 변환합니다. 모든 유형의 표현식을 무효화합니다
3.
사용 특징a. 주로 비다형성 변환 작업을 수행하며 C
에서 일반적인 변환 작업을 대체하는 데 사용됩니다. 암시적 변환을 권장합니다. b.
int n = 6;double d = static_cast<double>(n); // 基本类型转换int *pn = &n;double *d = static_cast<double *>(&n) //无关类型指针转换,编译错误void *p = static_cast<void *>(pn); //任意类型转换成void类型2. Dynamic_cast 변환
1.
기본 사용법: Dynamic_cast 표현식 2.
사용 시나리오: 파생 클래스 간 변환 시에만 Dynamic_cast 사용, type-id 클래스 포인터, 클래스 참조 또는 무효의*. 3.
사용 특징: a.dynamic_cast는 런타임 유형 확인이고 런타임 유형 정보가 필요하며 이 정보는 클래스의 가상 함수 테이블에 저장되므로 기본 클래스에는 가상 함수가 있어야 합니다. 클래스가 가상 함수를 정의하는 경우에만 가상 함수 테이블을 갖게 됩니다(클래스에 가상 함수가 없으면 일반적으로 이 클래스의 디자이너는 해당 클래스가 기본 클래스가 되는 것을 원하지 않습니다).
b 하향 변환의 경우 Dynamic_cast는 안전하지만(유형이 일치하지 않는 경우 변환된 포인터는 널 포인터입니다) static_cast는 안전하지 않습니다(유형이 일치하지 않는 경우 변환된 포인터는 잘못된 의미를 갖는 포인터입니다). 메모리, 불법 액세스 및 기타 문제가 발생할 수 있습니다.)
c. Dynamic_cast는 교차 변환도 수행할 수 있습니다
class BaseClass {public: int m_iNum; virtual void foo(){};//基类必须有虚函数。保持多台特性才能使用dynamic_cast};class DerivedClass: public BaseClass {public: char *m_szName[100]; void bar(){}; }; BaseClass* pb = new DerivedClass(); DerivedClass *pd1 = static_cast<DerivedClass *>(pb);//子类->父类,静态类型转换,正确但不推荐DerivedClass *pd2 = dynamic_cast<DerivedClass *>(pb);//子类->父类,动态类型转换,正确BaseClass* pb2 = new BaseClass();//父类->子类,静态类型转换,危险!访问子类m_szName成员越界DerivedClass *pd21 = static_cast<DerivedClass *>(pb2);//父类->子类,动态类型转换,安全的。结果是NULLDerivedClass *pd22 = dynamic_cast<DerivedClass *>(pb2);3, const_cast 변환
1.
기본 사용법: const_castexpression 2.
사용 시나리오a, 상수 포인터는 non-const 포인터로 변환되고 여전히 원래 객체를 가리킵니다.
b. 상수 참조는 non-const 참조로 변환되고 여전히 원래 객체를 가리킵니다.
3.
사용 특징: a. cosnt_cast는 4개입니다. 형 변환 연산자 중에서 상수에 대해 연산이 가능한 유일한 변환 연산자입니다.
b. constness를 제거하는 것은 위험한 작업이므로 사용하지 마십시오. 구체적인 시나리오는 다음과 같습니다. 클래스가 const를 통해 오버로딩을 제공할 때 비-const 함수는 일반적으로 const_cast를 호출하여 매개변수를 상수로 변환한 다음 상수 함수를 호출하고 결과를 가져온 다음 const_cast를 호출하여 불변성을 제거합니다.
struct SA { int i; };const SA ra;//ra.i = 10; //直接修改const类型,编译错误SA &rb = const_cast<SA&>(ra); rb.i = 10;4. reinterpret_cast 변환
1.
기본 사용법: reinterpret_castexpression 2.
사용 시나리오: 이 변환 문자를 최후의 수단, 고위험 작업으로 사용하지 마세요 3.
Us 연령 특징: a. reinterpret_cast는 하위 레이어의 데이터를 재해석하고, 특정 플랫폼에 따라 다르며, 이식성이 좋지 않습니다.
b. reinterpret_cast는 정수를 포인터로 변환하거나 포인터를 배열로 변환할 수 있습니다.
c. 따옴표 속 파렴치한 전환
int doSomething(){return 0;};//FuncPtr is 一个指向函数的指针,该函数没有参数,返回值类型为 voidtypedef void(*FuncPtr)();//10个FuncPtrs指针的数组 让我们假设你希望(因为某些莫名其妙的原因)把一个指向下面函数的指针存//入funcPtrArray数组:FuncPtr funcPtrArray[10]; funcPtrArray[0] = &doSomething;// 编译错误!类型不匹配,reinterpret_cast可以让编译器以你的方法去看待它们:funcPtrArrayfuncPtrArray[0] = reinterpret_cast<FuncPtr>(&doSomething);//不同函数指针类型之间进行转换
总结:
去const属性用const_cast。
基本类型转换用static_cast。
多态类之间的类型转换用daynamic_cast。
不同类型的指针类型转换用reinterpreter_cast。
相关文章:
相关视频:
위 내용은 C++_Basic 사용 및 사용 시나리오의 네 가지 유형의 캐스트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

C#.NET 생태계는 개발자가 응용 프로그램을 효율적으로 구축 할 수 있도록 풍부한 프레임 워크 및 라이브러리를 제공합니다. 1.asp.netCore는 고성능 웹 애플리케이션을 구축하는 데 사용되며 2.entityFrameworkCore는 데이터베이스 작업에 사용됩니다. 이러한 도구의 사용 및 모범 사례를 이해함으로써 개발자는 응용 프로그램의 품질과 성능을 향상시킬 수 있습니다.

C# .NET 앱을 Azure 또는 AWS에 배포하는 방법은 무엇입니까? 답은 Azureappservice와 Awelasticbeanstalk를 사용하는 것입니다. 1. Azure에서 Azureappservice 및 AzurePipelines를 사용하여 배포를 자동화하십시오. 2. AWS에서 Amazon Elasticbeanstalk 및 Awslambda를 사용하여 배포 및 서버리스 컴퓨팅을 구현하십시오.

C#과 .NET의 조합은 개발자에게 강력한 프로그래밍 환경을 제공합니다. 1) C#은 다형성 및 비동기 프로그래밍을 지원합니다. 2) .net은 크로스 플랫폼 기능과 동시 처리 메커니즘을 제공하여 데스크탑, 웹 및 모바일 애플리케이션 개발에 널리 사용됩니다.

.NETFramework는 소프트웨어 프레임 워크이며 C#은 프로그래밍 언어입니다. 1..netframework는 데스크탑, 웹 및 모바일 애플리케이션 개발을 지원하는 라이브러리 및 서비스를 제공합니다. 2.C#은 .NETFramework 용으로 설계되었으며 최신 프로그래밍 기능을 지원합니다. 3..NetFramework는 CLR을 통해 코드 실행을 관리하고 C# 코드는 IL로 컴파일되어 CLR에 의해 실행됩니다. 4. .NETFramework를 사용하여 응용 프로그램을 신속하게 개발하면 C#은 LINQ와 같은 고급 기능을 제공합니다. 5. 일반적인 오류에는 유형 변환 및 비동기 프로그래밍 교착 상태가 포함됩니다. 디버깅을 위해서는 VisualStudio 도구가 필요합니다.

C#은 Microsoft에서 개발 한 최신 객체 지향 프로그래밍 언어이며 .NET은 Microsoft가 제공하는 개발 프레임 워크입니다. C#은 C의 성능과 Java의 단순성을 결합하며 다양한 응용 프로그램을 구축하는 데 적합합니다. .NET 프레임 워크는 여러 언어를 지원하고 쓰레기 수집 메커니즘을 제공하며 메모리 관리를 단순화합니다.

C# 및 .NET 런타임은 개발자가 효율적이고 강력하며 크로스 플랫폼 개발 기능을 강화하기 위해 긴밀히 협력합니다. 1) C#은 .NET 프레임 워크와 완벽하게 통합하도록 설계된 유형 안전 및 객체 지향 프로그래밍 언어입니다. 2) .NET 런타임은 C# 코드 실행을 관리하고, 쓰레기 수집, 유형 안전 및 기타 서비스를 제공하며, 효율적이고 크로스 플랫폼 운영을 보장합니다.

C# .NET 개발을 시작하려면 다음과 같은 것이 필요합니다. 1. C#의 기본 지식과 .NET 프레임 워크의 핵심 개념을 이해하십시오. 2. 변수, 데이터 유형, 제어 구조, 기능 및 클래스의 기본 개념을 마스터하십시오. 3. LINQ 및 비동기 프로그래밍과 같은 C#의 고급 기능을 배우십시오. 4. 일반적인 오류에 대한 디버깅 기술 및 성능 최적화 방법에 익숙해 지십시오. 이러한 단계를 통해 C#.NET의 세계를 점차적으로 침투하고 효율적인 응용 프로그램을 작성할 수 있습니다.

C#과 .NET의 관계는 분리 할 수 없지만 같은 것은 아닙니다. C#은 프로그래밍 언어이며 .NET은 개발 플랫폼입니다. C#은 코드를 작성하고 .NET의 중간 언어 (IL)로 컴파일하고 .NET 런타임 (CLR)에 의해 실행되는 데 사용됩니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경
