찾다
백엔드 개발C#.Net 튜토리얼C++에서 const 상수의 일반적인 사용법 분석 및 설명

먼저 C 언어의 const와 C++의 const에 대해 설명하겠습니다. 전자에서 const로 수정된 변수는 단지 할당 기호의 왼쪽에 변수가 나타날 수 없다는 것을 컴파일러에 알려줄 뿐입니다. 후자의 C++는 C를 기반으로 const를 발전시켰습니다.

1. const:

    const:
    • const修饰的变量是只读的,本质还是变量

    • const修饰的局部变量在栈上分配空间

    • const修饰的全局变量在只读存储区分配空间

    • const只在编译期有用,在运行期无效

    • const不能定义真正意义上的常量

    const修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在赋值符号的左边。const 局部变量是在栈上分配空间,可以通过指针改变这个空间里面的值。过了编译期,const变量的常量特性,只读特性就没有了,只读特性只在编译期有效,运行期根本无效。const修饰的全局变量在只读存储区分配空间,因此如果用指针去修改了const修饰的全局变量,程序就会崩溃,因为修改了程序只读存储区中内容,大部分程序都会发生崩溃。

    2、C++中的const

    C++在C的基础上对const进行了进化处理,具体表现在:

    • const声明时,在符号表中放入常量

    • 编译过程中发现常量直接以符号表中的值替换(常量折叠)

    • 编译过程中也可能为对应的常量分配存储空间:

      • const用在全局或者使用了static关键字说明,存放在只读数据区

        extern const int i = 10;
        static const int i = 10;
        
        // 或者修饰全局变量
        const int a =10;
        int main()
        {}
      • 局部变量中对const常量使用了&操作符,在栈区分配空间

    注意:C++编译器虽然可能为const常量分配空间,但不会使用其存储空间中的值

    符号表是编译过程中产生的一种数据结构

    #include <iostream>
    #include <string>
    using namespace std;
    
    const int i = 10;          // 如果通过指针去改变i,就会出现段错误:尝试修改只读数据区数据
    int main()
    {
        const int a = 5;
        int *p = (int *)&a;    // &a, 给a标识符分配空间了,并用p指向了该空间,
                               // 可以通过*p访问这个地址,但是不能通过a来访问
        *p = 10;               // 不能通过指针去改变a的值
        cout << a << endl;
        cout << *p << endl;
        
        return 0;
    }

    3、 与宏定义对比

    C++ 中的const常量类似于宏定义

    const int c = 5;
    // 类似于
    #define c 5

    但是cosnt与宏定义的区别在于:

    • const常量是有编译器处理

    • 编译器对cosnt

      C 언어 변수 const에 의해 수정된은 읽기 전용이며 본질은 여전히 ​​변수입니다
    • const에 의해 수정된 지역 변수는 공간을 할당합니다. 스택# 🎜🎜#

    const 수정된 전역 변수는 읽기 전용 저장 영역에 공간을 할당합니다

    const는 컴파일 중에만 유용하고 런타임 중에는 유효하지 않습니다.

    const는 실제 상수를 정의할 수 없습니다. # 🎜🎜#

    const에 의해 수정된 변수는 실제 상수가 아니며 단지 변수가 상수의 왼쪽에 나타날 수 없다는 것을 컴파일러에 알려줄 뿐입니다. 할당 기호. const 지역 변수는 스택에 공간을 할당하며, 이 공간의 값은 포인터를 통해 변경될 수 있습니다. 컴파일 기간이 지나면 const 변수의 상수 특성과 읽기 전용 특성은 사라집니다. 읽기 전용 특성은 컴파일 기간 동안에만 유효하며 런타임에는 영향을 미치지 않습니다. const에 의해 수정된 전역 변수는 읽기 전용 저장 영역에 공간을 할당합니다. 따라서 포인터를 사용하여 const에 의해 수정된 전역 변수를 수정하면 프로그램이 중단됩니다. 수정된 프로그램만 있기 때문에 대부분의 프로그램은 메모리 영역의 내용을 읽을 때 충돌이 발생합니다.

    #🎜🎜#2. C++의 const:#🎜🎜#C++는 C를 기반으로 const를 발전시킵니다. # 🎜🎜#
      #🎜🎜##🎜🎜# const 선언 시 심볼 테이블에 상수를 넣어주세요 #🎜🎜# #🎜🎜##🎜 🎜##🎜🎜# 컴파일 과정에서 상수가 심볼 테이블의 값으로 직접 대체되는 것을 발견했습니다(상수 폴딩) #🎜🎜##🎜🎜##🎜🎜##🎜🎜#그것도 컴파일 과정에서 가능 해당 상수에 대한 저장 공간 할당: #🎜🎜##🎜🎜#
        #🎜🎜## 🎜🎜#const는 전역적으로 사용되거나 static 키워드 설명을 사용하여 읽기 전용 데이터 영역 #🎜🎜#
        #include <stdio.h>
        
        void f()
        {
            #define a 3
            const int b = 4;
        }
        
        void g()
        {
            printf("a = %d\n", a);
            // 在g函数中访问f函数中的宏定义,完全没有问题
            // 在预处理的时候就进行了宏替换,对编译器来说,就是printf("a = %d\n", 3);
            // 宏是没有作用域的概念
            
            // const 定义的常量,被编译器处理,是有作用域的,不能访问b
            printf("b = %d\n", b);
        }
        
        int main()
        {
            const int A = 1;
            const int B = 2;
            int array[A + B] = {0};    
            /* C编译
            const修饰得到的只是具有只读特性的变量,数组的大小是由两个变量的大小决定的,
            两个变量相加的结果需要在运行的时候才能直到,因此编译器编译的时候不知道这个数组长度,直接报错
            */
            
            /* C++编译
            const是定义的真正意义上的常量,直接从符号表中取值,编译的时候就知道A和B的值,
            可以得到数组的长度,不会报错
            */
            int i = 0;
            
            for(i=0; i<(A + B); i++)
            {
                printf("array[%d] = %d\n", i, array[i]);
            }
            
            f();
            g();
            
            return 0;
        }
        #🎜🎜##🎜🎜##에 저장됩니다. 🎜🎜# 지역 변수 & 연산자는 const 상수에 사용되어 스택 영역에 공간을 할당합니다 #🎜🎜##🎜🎜##🎜🎜##🎜🎜 #
        참고: C++ 컴파일러는 const 상수에 공간을 할당할 수 있지만 저장 공간의 값을 사용하지 않습니다.#🎜🎜#심볼 테이블은 컴파일 프로세스 중에 생성된 데이터 구조입니다. #🎜🎜#
        rrreee#🎜🎜#3. 매크로 정의와의 비교#🎜🎜#C++의 const 상수는 매크로 정의와 유사합니다#🎜🎜#rrreee #🎜🎜#그러나 cosnt 매크로 정의와의 차이점은 다음과 같습니다. #🎜🎜#
          #🎜🎜##🎜🎜#const code>상수는 컴파일러에 의해 처리됩니다# 🎜🎜##🎜🎜##🎜🎜##🎜🎜#컴파일러는 <code>cosnt 상수에 대한 유형 검사 및 범위 검사를 수행합니다#🎜🎜##🎜🎜# #🎜🎜##🎜🎜# 매크로 정의는 전처리기에 의해 처리되며 단순한 텍스트 대체입니다. #🎜🎜##🎜🎜##🎜🎜#rrreee#🎜🎜#관련 기사: #🎜🎜##🎜🎜 ##🎜🎜##🎜🎜# PHP에서 const와 정의의 차이점 분석#🎜🎜##🎜🎜##🎜🎜#관련 동영상: #🎜🎜##🎜🎜##🎜🎜#PHP 기본 분석 동영상 튜토리얼#🎜🎜##🎜🎜#

위 내용은 C++에서 const 상수의 일반적인 사용법 분석 및 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
.NET 내의 C# 코드 : 프로그래밍 프로세스 탐색.NET 내의 C# 코드 : 프로그래밍 프로세스 탐색Apr 12, 2025 am 12:02 AM

.NET에서 C#의 프로그래밍 프로세스에는 다음 단계가 포함됩니다. 1) C# 코드 작성, 2) 중간 언어 (IL)로 컴파일하고 .NET 런타임 (CLR)에 의해 실행됩니다. .NET에서 C#의 장점은 현대적인 구문, 강력한 유형 시스템 및 .NET 프레임 워크와의 긴밀한 통합으로 데스크탑 응용 프로그램에서 웹 서비스에 이르기까지 다양한 개발 시나리오에 적합합니다.

C# .NET : 핵심 개념 탐색 및 프로그래밍 기초C# .NET : 핵심 개념 탐색 및 프로그래밍 기초Apr 10, 2025 am 09:32 AM

C#은 Microsoft가 개발 한 최신 객체 지향 프로그래밍 언어이며 .NET 프레임 워크의 일부로 개발되었습니다. 1.C#은 캡슐화, 상속 및 다형성을 포함한 객체 지향 프로그래밍 (OOP)을 지원합니다. 2. C#의 비동기 프로그래밍은 응용 프로그램 응답 성을 향상시키기 위해 비동기 및 키워드를 기다리는 키워드를 통해 구현됩니다. 3. LINQ를 사용하여 데이터 컬렉션을 간결하게 처리하십시오. 4. 일반적인 오류에는 NULL 참조 예외 및 인덱스 외 예외가 포함됩니다. 디버깅 기술에는 디버거 사용 및 예외 처리가 포함됩니다. 5. 성능 최적화에는 StringBuilder 사용 및 불필요한 포장 및 Unboxing을 피하는 것이 포함됩니다.

C# .NET 응용 프로그램 테스트 : 장치, 통합 및 엔드 투 엔드 테스트C# .NET 응용 프로그램 테스트 : 장치, 통합 및 엔드 투 엔드 테스트Apr 09, 2025 am 12:04 AM

C#.NET 애플리케이션에 대한 테스트 전략에는 단위 테스트, 통합 테스트 및 엔드 투 엔드 테스트가 포함됩니다. 1. 단위 테스트를 통해 MSTEST, NUNIT 또는 XUNIT 프레임 워크를 사용하여 코드의 최소 단위가 독립적으로 작동합니다. 2. 통합 테스트는 일반적으로 사용되는 시뮬레이션 된 데이터 및 외부 서비스를 결합한 여러 장치의 기능을 확인합니다. 3. 엔드 투 엔드 테스트는 사용자의 완전한 작동 프로세스를 시뮬레이션하며 셀레늄은 일반적으로 자동 테스트에 사용됩니다.

Advanced C# .NET 튜토리얼 : ACE 귀하의 다음 선임 개발자 인터뷰Advanced C# .NET 튜토리얼 : ACE 귀하의 다음 선임 개발자 인터뷰Apr 08, 2025 am 12:06 AM

C# 수석 개발자와의 인터뷰에는 비동기 프로그래밍, LINQ 및 .NET 프레임 워크의 내부 작업 원리와 같은 핵심 지식을 마스터하는 것이 필요합니다. 1. 비동기 프로그래밍은 비동기를 통해 작업을 단순화하고 응용 프로그램 응답 성을 향상시키기 위해 기다리고 있습니다. 2.linq는 SQL 스타일로 데이터를 운영하고 성능에주의를 기울입니다. 3. Net Framework의 CLR은 메모리를 관리하며 가비지 컬렉션은주의해서 사용해야합니다.

C# .NET 인터뷰 질문 및 답변 : 전문 지식 레벨 업C# .NET 인터뷰 질문 및 답변 : 전문 지식 레벨 업Apr 07, 2025 am 12:01 AM

C#.NET 인터뷰 질문 및 답변에는 기본 지식, 핵심 개념 및 고급 사용이 포함됩니다. 1) 기본 지식 : C#은 Microsoft가 개발 한 객체 지향 언어이며 주로 .NET 프레임 워크에 사용됩니다. 2) 핵심 개념 : 위임 및 이벤트는 동적 바인딩 방법을 허용하고 LINQ는 강력한 쿼리 기능을 제공합니다. 3) 고급 사용 : 비동기 프로그래밍은 응답 성을 향상시키고 표현 트리는 동적 코드 구성에 사용됩니다.

C# .NET을 사용하여 마이크로 서비스 구축 : 건축가를위한 실용 가이드C# .NET을 사용하여 마이크로 서비스 구축 : 건축가를위한 실용 가이드Apr 06, 2025 am 12:08 AM

C#.net은 강력한 생태계와 풍부한 지원으로 인해 마이크로 서비스를 구축하는 데 인기있는 선택입니다. 1) ASP.NETCORE를 사용하여 RESTFULAPI를 작성하여 주문 생성 및 쿼리를 처리하십시오. 2) GRPC를 사용하여 마이크로 서비스 간의 효율적인 통신을 달성하고 주문 서비스를 정의하고 구현하십시오. 3) Docker Containerized 마이크로 서비스를 통해 배포 및 관리를 단순화합니다.

C# .NET 보안 모범 사례 : 일반적인 취약점 방지C# .NET 보안 모범 사례 : 일반적인 취약점 방지Apr 05, 2025 am 12:01 AM

C# 및 .NET의 보안 모범 사례에는 입력 확인, 출력 인코딩, 예외 처리, 인증 및 인증이 포함됩니다. 1) 일반 표현식 또는 내장 방법을 사용하여 악성 데이터가 시스템에 들어가는 것을 방지하기 위해 입력을 확인하십시오. 2) XSS 공격을 방지하기 위해 출력 인코딩 httputility.htmlencode 메서드를 사용하십시오. 3) 예외 처리는 정보 유출을 피하고 오류를 기록하지만 자세한 정보를 사용자에게 반환하지는 않습니다. 4) ASP.NETIDENITY 및 CAMPLES 기반 승인을 사용하여 신청서를 무단 액세스로부터 보호합니다.

C 언어 : 무엇을 의미 하는가C 언어 : 무엇을 의미 하는가Apr 03, 2025 pm 07:24 PM

C 언어의 결장의 의미 ( ':') : 조건부 명세서 : 조건부 표현 및 명령문 분리 블록 루프 문 : 초기화, 조건부 및 증분 표현식 매크로 정의 분리 : 매크로 이름 및 매크로 값 단일 라인 주석 설명 : 콜론에서 라인으로의 내용을 주석 차원으로 표현

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음