const

Tags:

liebmona.net/mblog

C에서 const가 const가 아닌 이유.

#include <stdio.h>

int main(void)
{
  const int i = 100;
  int *pi = (int*)&i;

  printf( “%d\n”, *pi );

  *pi = 400;

  printf( “%d\n”, *pi );

  return 0;
}

컴파일하여 실행해보면 알겠지만 포인터 변환에서 const 제거가

언제든 가능하므로.

심지어 (int*)을 생략해도 경고만 뜨면서 무사히 컴파일 완료.

const int *pi = &i; 이어야만 const가 보장됨.

Java에도 비슷한 트릭 있음(기억 안남 ㅜㅜ)

아마 이걸 말씀하시는게 아닐까라고 추측함.

참조는 unmodifiableList로 반환하지 않으면 final을 지정해도 final이 아님

import java.util.*;

class Ref {

  public final int array[];

  public Ref() {
    array = new int[] { 1,2,3,4,5 };
  }

  public void dump() {
    System.out.println(“array —–“);
    for(int i: array) {
      System.out.println(i);
    }
    System.out.println(“end   —–“);
  }
}

public class RefTest {

  public static void main(String[] args) {
    Ref r = new Ref();
    r.dump();
    r.array[0] = 3;
    r.dump();
  }
}

실행결과는

array —–
1
2
3
4
5
end —–
array —–
3
2
3
4
5
end —–

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *