이 ref-qualified 사용자 정의 변환이 호출되는 이유는 무엇입니까?

Afshin

다음 작은 코드 내에서 :

class A {    
};

class B {
    public:
    operator A() const & {
        return A{};
    }
};

void foo(const A& a) {

}

int main()
{
    B b;
    A a1 = b;
    A a2 = B{}; //<--- here
    foo(b);
    foo(B{}); //<--- here
}

지정된 줄이 컴파일 오류를 생성하지 않는 이유는 무엇입니까? 내 캐스트 연산자는 lvalue에 의해 규정 &되었으므로 객체가 rvalue 인이 두 줄에 대해 호출되지 않아야한다고 생각했습니다.

이 코드가 문제없이 컴파일되는 이유를 아십니까? const캐스트 연산자 선언에서 제거하면 이 두 줄이 오류가 발생 한다는 것을 알았습니다 . 그러나 const 한정 이이 ref 한정 메서드 호출에 어떤 영향을 미치는지 잘 모르겠습니다.

송유 안 야오

rvalue는 lvalue-reference에도 바인딩 될 수 있기 const때문입니다. (비상 수에 대한 lvalue 참조에 바인딩 될 수 없습니다.)

해결 방법으로 의도에 따라 const언급 한대로 한정자를 제거 하거나 rvalue-reference 한정자 (및 const필요한 경우 @HolyBlackCat이 제안한 한정자)로 오버로딩을 추가 하고 delete명시 적으로 표시 할 수 있습니다 .

class B {
    public:
    operator A() const & {
        return A{};
    }
    operator A() && = delete;
};

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Angular4-사용자 정의 toJSON ()이 새 객체에서만 호출되는 이유는 무엇입니까?

분류에서Dev

yield Request를 호출 할 때 사용자 정의 콜백이 호출되지 않고 parse 메서드가 호출되는 이유는 무엇입니까?

분류에서Dev

수신자의 onReceive가 호출되지 않는 이유는 무엇입니까?

분류에서Dev

복사 생성자가 표현식의 반환 문에 의해 호출되는 이유는 무엇입니까?

분류에서Dev

이 유형의 변수가 문자열과 호환되지 않는 이유는 무엇입니까?

분류에서Dev

생성자가 호출되는 이유는 무엇입니까?

분류에서Dev

내 기본 클래스의 정적 생성자가 호출되지 않는 이유는 무엇입니까?

분류에서Dev

React에서 ref를 사용하는 이유는 무엇입니까? 사용 사례는 무엇입니까?

분류에서Dev

이 사용자 정의보기 속성이 무시되는 이유는 무엇입니까?

분류에서Dev

pop () 호출 후 top ()의 반환 값이 변경되는 이유는 무엇입니까?

분류에서Dev

내 C ++ 프로그램의 복사 생성자가 두 번 호출되는 이유는 무엇입니까?

분류에서Dev

사용자 정의 ImageView가 startAnimation (Animation)을 호출 할 때 JUnit 테스트 중에 getActivity ()가 차단되는 이유는 무엇입니까?

분류에서Dev

Single과 Decimal 사이의 Decimal.MaxValue 변환이 전이되지 않는 이유는 무엇입니까?

분류에서Dev

이 프로그램의 소멸자가 두 번 호출되는 이유는 무엇입니까?

분류에서Dev

AppTheme이 사용자 정의 ActionBar 도구 모음에 적용되는 이유는 무엇입니까?

분류에서Dev

이 API 호출이 길이가 8 인 4 개의 숫자를 반환하는 이유는 무엇입니까?

분류에서Dev

복사 생성자가 호출되는 이유는 무엇입니까?

분류에서Dev

어셈블리 언어의 기호가 정의되기 전에 사용되는 이유는 무엇입니까?

분류에서Dev

사용자 정의 serialVersionUID가 desialization 동안 사용되지 않는 이유는 무엇입니까?

분류에서Dev

내 상수 정수 유형이 문자열로 변환되는 이유는 무엇입니까?

분류에서Dev

사용자 정의 버튼이 가끔 잘못 표시되는 이유는 무엇입니까?

분류에서Dev

OOP를 사용할 때 문자열 옆에 "정의되지 않음"이있는 이유는 무엇입니까?

분류에서Dev

사용자 지정 UserControl의 종속성 속성이 인식되지 않는 이유는 무엇입니까?

분류에서Dev

비 정적 메서드를 호출 할 때 구조체의 정적 생성자가 호출되는 이유는 무엇입니까?

분류에서Dev

이동 생성자가 호출되는 이유는 무엇입니까?

분류에서Dev

이 생성자가 두 번 호출되는 이유는 무엇입니까?

분류에서Dev

내 사용자 지정 셀이 비어있는 이유는 무엇입니까?

분류에서Dev

document.write () 사용시 정의되지 않는 이유는 무엇입니까?

분류에서Dev

메서드가 재정의되지 않은 경우 '공변'이 사용되는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    Angular4-사용자 정의 toJSON ()이 새 객체에서만 호출되는 이유는 무엇입니까?

  2. 2

    yield Request를 호출 할 때 사용자 정의 콜백이 호출되지 않고 parse 메서드가 호출되는 이유는 무엇입니까?

  3. 3

    수신자의 onReceive가 호출되지 않는 이유는 무엇입니까?

  4. 4

    복사 생성자가 표현식의 반환 문에 의해 호출되는 이유는 무엇입니까?

  5. 5

    이 유형의 변수가 문자열과 호환되지 않는 이유는 무엇입니까?

  6. 6

    생성자가 호출되는 이유는 무엇입니까?

  7. 7

    내 기본 클래스의 정적 생성자가 호출되지 않는 이유는 무엇입니까?

  8. 8

    React에서 ref를 사용하는 이유는 무엇입니까? 사용 사례는 무엇입니까?

  9. 9

    이 사용자 정의보기 속성이 무시되는 이유는 무엇입니까?

  10. 10

    pop () 호출 후 top ()의 반환 값이 변경되는 이유는 무엇입니까?

  11. 11

    내 C ++ 프로그램의 복사 생성자가 두 번 호출되는 이유는 무엇입니까?

  12. 12

    사용자 정의 ImageView가 startAnimation (Animation)을 호출 할 때 JUnit 테스트 중에 getActivity ()가 차단되는 이유는 무엇입니까?

  13. 13

    Single과 Decimal 사이의 Decimal.MaxValue 변환이 전이되지 않는 이유는 무엇입니까?

  14. 14

    이 프로그램의 소멸자가 두 번 호출되는 이유는 무엇입니까?

  15. 15

    AppTheme이 사용자 정의 ActionBar 도구 모음에 적용되는 이유는 무엇입니까?

  16. 16

    이 API 호출이 길이가 8 인 4 개의 숫자를 반환하는 이유는 무엇입니까?

  17. 17

    복사 생성자가 호출되는 이유는 무엇입니까?

  18. 18

    어셈블리 언어의 기호가 정의되기 전에 사용되는 이유는 무엇입니까?

  19. 19

    사용자 정의 serialVersionUID가 desialization 동안 사용되지 않는 이유는 무엇입니까?

  20. 20

    내 상수 정수 유형이 문자열로 변환되는 이유는 무엇입니까?

  21. 21

    사용자 정의 버튼이 가끔 잘못 표시되는 이유는 무엇입니까?

  22. 22

    OOP를 사용할 때 문자열 옆에 "정의되지 않음"이있는 이유는 무엇입니까?

  23. 23

    사용자 지정 UserControl의 종속성 속성이 인식되지 않는 이유는 무엇입니까?

  24. 24

    비 정적 메서드를 호출 할 때 구조체의 정적 생성자가 호출되는 이유는 무엇입니까?

  25. 25

    이동 생성자가 호출되는 이유는 무엇입니까?

  26. 26

    이 생성자가 두 번 호출되는 이유는 무엇입니까?

  27. 27

    내 사용자 지정 셀이 비어있는 이유는 무엇입니까?

  28. 28

    document.write () 사용시 정의되지 않는 이유는 무엇입니까?

  29. 29

    메서드가 재정의되지 않은 경우 '공변'이 사용되는 이유는 무엇입니까?

뜨겁다태그

보관