다음 코드는 컴파일되지 않습니다.
int a = 1, b = 2, c = 3;
int& arr[] = {a,b,c,8};
C ++ 표준은 이것에 대해 무엇을 말합니까?
참조가 포함 된 클래스를 선언 한 다음 아래 표시된 것처럼 해당 클래스의 배열을 만들 수 있다는 것을 알고 있습니다. 그러나 실제로 위의 코드가 컴파일되지 않는 이유를 알고 싶습니다.
struct cintref
{
cintref(const int & ref) : ref(ref) {}
operator const int &() { return ref; }
private:
const int & ref;
void operator=(const cintref &);
};
int main()
{
int a=1,b=2,c=3;
//typedef const int & cintref;
cintref arr[] = {a,b,c,8};
}
참조 배열을 시뮬레이션하는 struct cintref
대신 사용할 수 있습니다 const int &
.
intlink value = 8;
작동합니다. 당신이 믿지 않는지 확인하십시오.
operator=
. 참조는 다시 설치할 수 없습니다. 당신이 정말로 같은 의미를 원한다면 - 저는 개인적으로 그들이 실질적으로 유용하다있는 상황을 발견 적이 없다하지만 - 후 std::reference_wrapper
실제로 포인터를 저장하지만, 레퍼런스와 같이 제공하기 때문에, 그것을 할 수있는 방법이 될 것입니다 operator
들과 않습니다 다시 장착 할 수 있습니다. 그러나 나는 단지 포인터를 사용할 것입니다!