C++에서 Const Int와 Int Const의 차이점 - 2020 - 다른 사람
-
C++에서
const int
와int const
의 차이점 -
C++
const
키워드 -
변수가 있는
const int
및int const
-
포인터가 있는
const int
및int const
-
C++에서
int * const
사용 -
C++에서
const int *
사용 - 결론
모든 프로그래밍 언어에서 가장 사랑받고 까다로운 질문은 약간의 변경만으로도 프로그램 실행 방법과 출력 결과에 많은 차이를 만드는 문제입니다.
이 기사에서는 const int
가 C++의 int const
와 동일한지 여부에 대해 논의합니다.
C++에서 const int
와 int 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 int
및 int 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 const
가 const int
와 동일하다고 결론지을 수 있지만 문제가 있습니다. 이것은 포인터가 들어오지 않을 때까지 변수에 해당됩니다.
포인터의 경우 키워드 const
의 의미는 위치에 따라 변경됩니다. 키워드 const
가 포인터와 어떻게 작동하는지 논의해 보겠습니다.
포인터가 있는 const int
및 int const
포인터와 함께 const
키워드를 사용하는 것은 매우 간단합니다. 포인터를 불변으로 만들거나 불변을 가리키는 내용을 만들 수 있습니다.
아래 코드 줄을 보십시오. demo
포인터는 값을 변경할 수 없는 상수 포인터입니다.
즉, 다른 값이나 변수를 가리키도록 수정할 수 없습니다. 우리는 이것을 오른쪽에서 왼쪽으로 읽습니다. 데모는 정수에 대한 상수 포인터입니다.
int* const demo = &anyvalue;
그러나 아래의 두 번째 코드에서 demo
포인터가 가리키는 데이터는 변경할 수 없습니다. 우리는 이것을 다음과 같이 읽습니다. 데모는 상수인 정수에 대한 포인터입니다.
const int *demo = &anyvalue;
예제를 통해 이 두 줄의 코드를 이해합시다.
C++에서 int * const
사용
위에서 언급했듯이 키워드 const
를 포인터 변수 앞에 배치하면 포인터가 다른 값이나 변수를 가리키도록 변경할 수 없습니다. 이것은 예를 통해 더 깊이 알 수 있습니다.
다음 사항은 아래 주어진 코드에서 일어나는 일을 요약합니다.
- 여기에서 먼저 변수
one
의 값을 포인터 변수*demo
에 할당합니다. 이것은 포인터*demo
가 변수one
을 가리킴을 의미합니다. - 변수
one
의 값을 인쇄하면1
이 출력되고demo
를 인쇄하면 가리키는 주소가 표시됩니다. 이것은 변수one
의 주소입니다. - 나중에 다른 변수
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 *
사용
포인터를 사용하여 변수 값을 변경할 수 있다는 것을 이미 알고 있습니다. 이는 아래 예에 나와 있습니다.
다음 사항은 이 코드에서 일어나는 일을 요약한 것입니다.
- 먼저 변수
one
에 값1
을 할당하고*demo
포인터는 변수one
을 가리킵니다. - 그런 다음 변수
one
과 포인터*demo
의 값을 인쇄합니다. 둘 다1
로 출력을 제공합니다. - 나중에 값
2
를 포인터 변수*demo
에 할당합니다. - 마지막으로 변수
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 int
와 int const
가 어떻게 다른지 배웠습니다. 게다가 우리는 변수와 포인터의 맥락에서 그것들이 어떻게 작동하는지 보았습니다.
우리는 또한 이 두 형식이 단순한 변수에 대해 동일하지만 의미하는 포인터가 크게 변경된다는 것을 배웠습니다. 다양한 작업 예제를 통해 이를 이해하고 C++의 const
키워드에 대한 기본 사항도 살펴보았습니다.