오류, 버그, 질문 - 페이지 1705

 
fxsaber :
내가 바보. 왜 불가능한지 말해주세요?
이해했다.
 
fxsaber :
이해했다.
설명하다
 
Комбинатор :
설명하다
작동하지 않습니다 - 용어상의 차이.
 
Комбинатор :
설명하다
this[0]은 rvalue입니다.
 
Sergei Vladimirov :
this[0]은 rvalue입니다.

이것은 명확하지 않습니다.

할당이 첫 번째 경우에 작동하면 두 번째 경우에도 논리적으로 작동해야 합니다. 첫 번째 경우에는 동일한 rvalue가 포인터에 할당되지만 연산자가 작동하기 때문입니다!

이것은 물론 전적으로 제 생각입니다. 그러나 사냥을 이해하려면.

 
Комбинатор :

이것은 명확하지 않습니다.

나에게도 명확하지 않습니다. ))업데이트. 그것은 이미 분명합니다.

할당이 첫 번째 경우에 작동하면 두 번째 경우에도 논리적으로 작동해야 합니다. 첫 번째 경우에는 동일한 rvalue가 포인터에 할당되지만 연산자가 작동하기 때문입니다!

물론 이것은 전적으로 제 생각입니다. 그러나 사냥을 이해하려면.

rvalue는 왼쪽 값에만 할당하거나 임시 상수일 수 있습니다.

플러스 측면에서 작동하는 것은 다음과 같습니다.

 class A
{
public :
         int m[ 10 ];

         int & operator [] ( const int i)
        {
                 return ((m[i]));
        }
};

int main()
{
        A oA;
        oA[ 2 ] = 5 ;
}

그러나 이것은 아닙니다.

 class A
{
public :
         int* m[ 10 ];

         int * operator [] ( const int i)
        {
                 return ((m[i]));
        }
};

int main()
{
        A oA;
        oA[ 2 ] = new int ;     // error C2106: =: левый операнд должен быть левосторонним значением
}
 
Sergei Vladimirov :

그러나 이것은 그렇지 않으며, 나는 무언가를 따라잡을 수 없습니다. 차이점은 무엇입니까?

인덱스에 링크를 추가하면 작동합니다. 또는 이중 포인터.
 
Комбинатор :
인덱스에 링크를 추가하면 작동합니다. 또는 이중 포인터.
어떤 링크가 어디에 있는지 이해하지 못하셨나요?
 
젠장, mlin. 두 번째 예에서 operator[]는 i번째 요소의 주소를 반환합니다. 물론 변경할 수는 없습니다. 저녁에 셧다운.
 

오, 나는 속도를 늦추고 있어, 두 번째 예는 일반적으로 틀리다

따라서 논리적입니다.

오류: 'int*' 유형의 rvalue에서 'int*&' 유형의 비 const 참조 초기화가 잘못되었습니다.