C++에서 Const Int와 Int Const의 차이점 - 2020 - 다른 사람

Shikha Chaudhary 2024년2월16일
  1. C++에서 const intint const의 차이점
  2. C++ const 키워드
  3. 변수가 있는 const intint const
  4. 포인터가 있는 const intint const
  5. C++에서 int * const 사용
  6. C++에서 const int * 사용
  7. 결론
C++에서 Const Int와 Int Const의 차이점 - 2020 - 다른 사람

모든 프로그래밍 언어에서 가장 사랑받고 까다로운 질문은 약간의 변경만으로도 프로그램 실행 방법과 출력 결과에 많은 차이를 만드는 문제입니다.

이 기사에서는 const int가 C++의 int const와 동일한지 여부에 대해 논의합니다.

C++에서 const intint const의 차이점

암호:

int const a = 1000;
const int a = 1000;

다음은 거의 비슷하게 보이는 두 줄의 코드입니다. 자, 이 두 줄의 코드가 같습니까?

이 질문에 답하기 전에 C++의 const 키워드의 기본 사항을 다시 살펴보겠습니다.

C++ const 키워드

C++의 const 키워드는 특정 항목을 일정하게 유지하는 데 도움이 됩니다. 이는 변수, 포인터 또는 메서드 앞에 const 키워드를 넣으면 프로그램이 실행되는 동안 이러한 변수, 포인터 및 메서드의 데이터 항목 값을 변경할 수 없음을 의미합니다.

const 키워드로 초기화된 변수, 포인터 또는 메서드의 값을 변경하려고 하면 오류가 발생한다고 가정합니다.

암호:

#include <iostream>
using namespace std;

int main() {
  const int demo = 1;  // constant variable
  cout << demo;
  demo = 2  // changing the value of constant variable
         cout
         << demo;
  return 0;
}

출력:

In function 'int main()': error: assignment of read-only variable 'demo'
    9 |     demo = 2
    |     ~~~~~^~~

위의 예에서 const 변수 demo를 선언하고 1 값을 할당합니다. 그런 다음 동일한 상수 변수에 다른 값 2를 할당합니다.

결과에서 볼 수 있듯이 오류가 발생합니다.

암호:

#include <iostream>
using namespace std;

int main() {
  int demo = 1;
  cout << "The initial value is: " << demo << endl;

  // changing the value of the variable
  demo = 2;

  cout << "The changed value is: " << demo << endl;
  return 0;
}

출력:

The initial value is: 1
The changed value is: 2

이번에는 const 키워드로 demo 변수를 초기화하지 않습니다. 따라서 오류 없이 이 변수의 값을 변경할 수 있습니다.

이것이 본질적으로 const 키워드가 작동하는 방식입니다. const 키워드에 대한 자세한 내용은 이 링크를 참조하십시오.

우리가 대답해야 했던 질문으로 돌아가자.

변수가 있는 const intint const

C++에서 const를 변수에 연결하는 표준 방법은 이 키워드를 변수의 데이터 유형 앞에 두는 것입니다. 그러나 변수 자체 앞에 배치하면 동일한 목적을 수행하고 유사하게 작동합니다.

이는 다음 코드 행이 동등하고 정확함을 의미합니다.

const int demo = 1000;
int const demo = 1000;

이러한 선언을 읽을 때 트릭은 오른쪽에서 왼쪽으로 이동하는 것입니다. 따라서 코드의 첫 번째 줄은 다음과 같이 읽습니다. 데모는 상수 정수입니다.

두 번째 줄은 다음과 같이 읽습니다. - demo는 상수 정수입니다. 말할 것도 없이, 이 두 진술은 같은 의미입니다.

실제 사례를 통해 이를 확인할 수 있습니다. 다음 예에서는 const 키워드를 데이터 유형, 즉 int 앞에 놓고 변수 demo를 인쇄합니다.

암호:

#include <iostream>
using namespace std;

int main() {
  const int demo = 1000;  // const keyword before the data type
  cout << demo;
}

출력:

1000

변수 demo 자체 앞에 const 키워드를 사용하여 동일한 작업을 시도해 보겠습니다.

#include <iostream>
using namespace std;

int main() {
  int const demo = 1000;  // const keyword before the variable itself
  cout << demo;
}

출력:

1000

이러한 명령문이 어떤 종류의 오류도 발생하지 않고 동일한 방식으로 작동하는 방법을 확인하십시오. 상수 변수를 선언해야 할 때 이러한 명령문 중 하나를 사용할 수 있습니다.

따라서 int constconst int와 동일하다고 결론지을 수 있지만 문제가 있습니다. 이것은 포인터가 들어오지 않을 때까지 변수에 해당됩니다.

포인터의 경우 키워드 const의 의미는 위치에 따라 변경됩니다. 키워드 const가 포인터와 어떻게 작동하는지 논의해 보겠습니다.

포인터가 있는 const intint const

포인터와 함께 const 키워드를 사용하는 것은 매우 간단합니다. 포인터를 불변으로 만들거나 불변을 가리키는 내용을 만들 수 있습니다.

아래 코드 줄을 보십시오. demo 포인터는 값을 변경할 수 없는 상수 포인터입니다.

즉, 다른 값이나 변수를 가리키도록 수정할 수 없습니다. 우리는 이것을 오른쪽에서 왼쪽으로 읽습니다. 데모는 정수에 대한 상수 포인터입니다.

int* const demo = &anyvalue;

그러나 아래의 두 번째 코드에서 demo 포인터가 가리키는 데이터는 변경할 수 없습니다. 우리는 이것을 다음과 같이 읽습니다. 데모는 상수인 정수에 대한 포인터입니다.

const int *demo = &anyvalue;

예제를 통해 이 두 줄의 코드를 이해합시다.

C++에서 int * const 사용

위에서 언급했듯이 키워드 const를 포인터 변수 앞에 배치하면 포인터가 다른 값이나 변수를 가리키도록 변경할 수 없습니다. 이것은 예를 통해 더 깊이 알 수 있습니다.

다음 사항은 아래 주어진 코드에서 일어나는 일을 요약합니다.

  1. 여기에서 먼저 변수 one의 값을 포인터 변수 *demo에 할당합니다. 이것은 포인터 *demo가 변수 one을 가리킴을 의미합니다.
  2. 변수 one의 값을 인쇄하면 1이 출력되고 demo를 인쇄하면 가리키는 주소가 표시됩니다. 이것은 변수 one의 주소입니다.
  3. 나중에 다른 변수 two를 동일한 포인터 변수 demo에 할당하고 값을 인쇄합니다. 이번에는 포인터가 다른 주소를 반환합니다.

암호:

#include <iostream>
using namespace std;

int main() {
  int one = 1;
  int two = 2;
  int *demo = &one;  // demo pointer points to variable one

  cout << one << endl;
  cout << demo << endl;

  demo = &two;  // assigning the variable two to demo variable

  cout << two << endl;
  cout << demo << endl;

  return 0;
}

출력:

1
0x7ffc22e802a8
2
0x7ffc22e802ac

동일한 포인터 변수에 다른 변수를 할당하는 방법을 볼 수 있습니다. 포인터 변수 앞에 const 키워드를 붙이면 이 변경이 불가능합니다.

암호:

#include <iostream>
using namespace std;

int main() {
  int one = 1;
  int two = 2;
  int* const demo = &one;  // attach const keyword before the pointer variable

  cout << one << endl;
  cout << demo << endl;

  demo = &two;  // this assignment will now give an error

  cout << two << endl;
  cout << demo << endl;

  return 0;
}

출력:

In function 'int main()': error: assignment of read-only variable 'demo'
   13 |     demo = &two;
      |     ~~~~~^~~~~~

이번에는 선언된 포인터가 상수이므로 다른 변수를 할당할 수 없습니다. 따라서 오류가 발생합니다.

이것이 포인터와 함께 사용될 때 int const가 의미하는 것입니다.

C++에서 const int * 사용

포인터를 사용하여 변수 값을 변경할 수 있다는 것을 이미 알고 있습니다. 이는 아래 예에 나와 있습니다.

다음 사항은 이 코드에서 일어나는 일을 요약한 것입니다.

  1. 먼저 변수 one에 값 1을 할당하고 *demo 포인터는 변수 one을 가리킵니다.
  2. 그런 다음 변수 one과 포인터 *demo의 값을 인쇄합니다. 둘 다 1로 출력을 제공합니다.
  3. 나중에 값 2를 포인터 변수 *demo에 할당합니다.
  4. 마지막으로 변수 one과 포인터 demo의 값을 인쇄하지만 이번에는 둘 다 2로 출력을 제공합니다.

암호:

#include <iostream>
using namespace std;

int main() {
  int one = 1;  // variable one holds the value 1
  int *demo = &one;

  cout << one << endl;
  cout << *demo << endl;

  *demo = 2;  // assign the value 2 to variable demo

  cout << one << endl;
  cout << *demo << endl;
}

출력:

1
1
2
2

변수가 할당된 포인터의 도움으로 변수 값이 어떻게 변경되는지 확인하십시오. 이제 포인터의 데이터 유형 앞에 const 키워드를 사용하면 이러한 종류의 변경이 불가능합니다.

암호:

#include <iostream>
using namespace std;

int main() {
  int one = 1;
  const int *demo = &one;  // attach const keyword before data type

  cout << one << endl;
  cout << *demo << endl;

  *demo = 2;  // this assignment will give an error now

  cout << one << endl;
  cout << *demo << endl;
}

출력:

In function 'int main()': error: assignment of read-only location '* demo'
   12 |     *demo = 2;
      |     ~~~~~~^~~

포인터가 가리키는 변수의 값을 변경하려고 하면 오류가 발생합니다. 이것이 포인터와 함께 사용될 때 const int 가 의미하는 것입니다.

결론

이 기사에서는 const intint const가 어떻게 다른지 배웠습니다. 게다가 우리는 변수와 포인터의 맥락에서 그것들이 어떻게 작동하는지 보았습니다.

우리는 또한 이 두 형식이 단순한 변수에 대해 동일하지만 의미하는 포인터가 크게 변경된다는 것을 배웠습니다. 다양한 작업 예제를 통해 이를 이해하고 C++의 const 키워드에 대한 기본 사항도 살펴보았습니다.

관련 문장 - C++ Keyword