[C++ 기초질문] const에 대해 간단한 질문드립니다.
글쓴이: junyul1994 / 작성시간: 수, 2014/09/10 - 12:56오전
아래 코드에서 sum 함수 정의할 때, const가 없어도 잘 컴파일되고 실행되는걸 확인했습니다.
그래도 const를 굳이 쓰는 특별한 의도나 이유가 있을까요?
0 #include <iostream> 1 using namespace std; 2 3 int sum(const int array[], const int length) { 4 long sum = 0; 5 for(int i = 0; i < length; sum += array[i++]); 6 return sum; 7 } 8 9 int main() { 10 int arr[] = {1, 2, 3, 4, 5, 6, 7}; 11 cout << "Sum: " << sum(arr, 7) << endl; 12 return 0; 13 }
* 코드 출처: MIT C++ Open Course Lecture Note 4 "Arrays and Strings"
* URL: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-096-introduction-to-c-january-iap-2011/lecture-notes/MIT6_096IAP11_lec04.pdf
Forums:
프로그래머의 의도를 알려주는 거지요
함수 내에서 해당 변수가 변하지 않는다는 걸 가정하고 있다는 걸 컴파일러에게 알리는 것인데,
만약 실수라도 해서 변경하는 코드를 넣었을 경우 컴파일러가 이를 알려주므로 문제를 빨리 파악할 수 있겠죠.
해당 함수를 사용하는 프로그래머 입장에서도 아 이건 안 변하는 거구나 하고 빨리 판단할 수 있고..
값이 변하지 않는다는 걸 가정할 경우 컴파일러 입장에서도 추가 최적화의 여지가 있습니다.
쓰지 않아도 되기야 하지만 적극적으로 사용했을 경우 이득이 있는 셈이죠.
--
+1
+1
저는 이렇게 생각했습니다.
const로 선언한 경우
const로 선언한 변수의 경우, 컴파일러+운영체제 조합에 따라서, 별도의 구역에 메모리를 할당하고,
그래서 문법상 제약뿐만 아니라, 실제로 운영체제상으로 보호해주는걸로 알고 있습니다.
자세한건 [Effective C++ . 스콧 마이어스 저] item 2, item 3. 참조하세요. 최적화등 여러가지 방면에서 왜 좋은지 설명해 줍니다.
...
그건 const로 선언한 global 변수의 경우에는 가능하지만 지금처럼 함수 인자를 const로 받는 경우에는 해당되지 않습니다.
함수를 부르는 쪽에서 인자로 global 변수든 스택의 로컬 변수든 new로 할당한 변수든 아무 거나 넘겨줄 수 있으니 "별도 구역의 메모리"가 성립하지 않지요.
const 사용의 필요성을 두고 컴파일 최적화까지
const 사용의 필요성을 두고 컴파일 최적화까지 생각할 필요가 없어보입니다
그런 기능까지 있는 컴파일러가 존재한다면 좋겠지만 말이죠
const 사용의 필요성은 정의대로 그 변수는 값을 고치면 안된다는 표시이고
그렇게 되면 오류를 내달라는 표시입니다
이게 왜 필요하냐면
소스코드는 "여러사람이 함께" 작성하는 것이기 때문에
다른 사람이 내용을 수정하면서 바꾸면 안되는 변수를 바꿀 수도 있기 때문이고
본인 또한 바꿔버리는 실수를 쉽게 할 수 있기때문에
const를 붙일 수 있는 곳에는 죄다 붙히는 것이 정석(?)입니다
댓글 달기