(그 LPCSTR
/LPSTR
typenames에만 코드를 당황하게.)
당신이 가지고있는 문제는이 코드는 바로 그 같은 이유로 컴파일되지 않습니다
char *p = NULL;
const char *&r = p; // ERROR
다음과 같은 간결한 방법으로 표현 될 수 있습니다 원래 버전은 컴파일되지 않습니다. C++에서는 이와 같은 참조 초기화가 잘못되었습니다. 귀하의 예제에서 함수 초기화 (에서 func2
로)를 호출 할 때 암시 적으로 동일한 초기화가 사용됩니다. 그러나이 예에서는 명시 적으로 수행됩니다.
불법 인 이유는 C++ (및 C)에서는 T**
->const T**
과 거의 같은 변환입니다. 이것은 이전 FAQ입니다 : http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.17. 내 위의 예에서 초기화가 합법적 인 경우
기본적으로, 하나는 우리가 어떤없이 CONST-정확성 규칙을 깰 수있는 것을 의미 작업
const char cc = 0;
r = &cc; // OK. Note: `p` now points to `cc`!
*p = 1; // !!! Attempts to modify `cc` !!!
다음과 같은 순서를 계속 할 수있을 것입니다 "해킹", 즉 단일 캐스트를 사용하지 않고. 이것은 C++뿐만 아니라 C에서 받아 들일 수없는 것으로 간주됩니다. 이는 T **
->const T **
과 같은 변환이고 T *&
->const T *&
과 같은 초기화는 허용되지 않습니다.
단지 같은 T**
도 참고 -
char *p = 0;
const char *const &r = p; // OK
출처
2011-04-21 07:10:43
AnT
컴파일 해 보셨습니까? 오류가 발생 했습니까? 정확히 어디에서 오류가 발생 했습니까? 정확히 뭐라고 했지? –