값으로 반환 된 const 객체를 계속 이동할 수 있습니까?

중요하지 않음

예:

Foo return_a_foo()
{
    const auto a_foo = make_a_foo();

    //Work with, but do not mutate a_foo...

    return a_foo;       
}

컴파일러가 RVO를 사용할 수 없다면 적어도 a_foo를 시도하고 이동할 것으로 예상합니다. 그러나 a_foo는 const입니다 (하지만 여전히 범위를 벗어납니다). 표준의 어느 곳에서 이것이 움직이지 않는 것을 100 % 보장한다고 말합니까 (불만) 아니면 구현이 정의되어 있습니까?

리처드하지 스

값으로 반환 된 const 객체를 계속 이동할 수 있습니까?

어떤 사람들은 대답이 "가끔 그렇다"라는 것을 알고 충격을받을 것입니다.

그러나이를 활성화하려면 더 많은 생성자를 제공해야합니다. 멤버를 만들 mutable거나 그렇지 않으면 const-move-construction을 수동으로 처리해야합니다.

증명:

#include <iostream>
#include <memory>

struct Foo
{
    Foo() { std::cout << "default c'tor\n"; }
    Foo(Foo const&&) { std::cout << "Foo const&&\n"; }
    Foo(Foo &&) { std::cout << "Foo &&\n"; }
    Foo(Foo const&) { std::cout << "Foo const&\n"; }
    Foo(Foo &) { std::cout << "Foo &\n"; }

};

const Foo make_a_foo()
{
    auto p = std::make_unique<const Foo>();
    return std::move(*p);
}

const Foo return_a_foo()
{
    const auto a_foo = make_a_foo();

    //Work with, but do not mutate a_foo...

    return a_foo;
}

int main()
{
    auto f = return_a_foo();
}

예제 출력 :

default c'tor
Foo const&&

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

일반 JSON 객체를 중첩 된 JSON 객체로 어떻게 변환 할 수 있습니까?

분류에서Dev

TypeScript 객체를 일반 객체로 어떻게 변환 할 수 있습니까?

분류에서Dev

반환 된 결과를 여러 값으로 제한 할 수 있습니다.

분류에서Dev

반환 유형이 const 일 때 반환 된 값을 수정할 수있는 이유는 무엇입니까?

분류에서Dev

피벗 함수를 사용할 때 분산 된 값의 합계를 반환 할 수 있습니까?

분류에서Dev

Java에서 동적으로 객체 속성을 설정할 수 있습니까 (반사없이)?

분류에서Dev

객체 함수 호출없이 (아마 계산 된) 속성 값을 얻을 수 있습니까?

분류에서Dev

Typescript의 인수를 기반으로 키 값 쌍이있는 객체 반환

분류에서Dev

Cython은 파이썬 객체를 const float로 변환 할 수 없습니다 *

분류에서Dev

const 객체 함수를 반환 한 결과 인 const 객체에서 멤버 변수를 변경할 수있는 이유는 무엇입니까?

분류에서Dev

템플릿 함수에서 반환 된 const 종속 이름, const는 어디로 갑니까?

분류에서Dev

Javascript 및 / 또는 jQuery가 이런 방식으로 객체를 반환 할 수 있습니까?

분류에서Dev

Typescript / Angular2에서 동적으로 유형이 지정된 개체를 어떻게 반환 할 수 있습니까?

분류에서Dev

char *에 메모리를 할당 할 수 있지만 const char *로 반환 할 수 있습니까?

분류에서Dev

Python3의 값이 아닌 객체 속성에 대한 링크를 어떻게 반환 할 수 있습니까?

분류에서Dev

반환 된 속성 / 메소드를 JavaScript로 내보낼 수 있습니까?

분류에서Dev

SQLite 쿼리에서 반환 된 열 값을 테이블 이름으로 사용할 수 있습니까?

분류에서Dev

해당 객체가 const로 전달되는 동안 어떻게 벡터를 클래스의 멤버로 반복 할 수 있습니까?

분류에서Dev

비동기 함수에서 반환 된 객체에서 "then"속성이 자동으로 액세스되는 이유는 무엇입니까?

분류에서Dev

비동기 관계를 기반으로 Ember 데이터 모델에서 Ember.js 계산 속성을 어떻게 할 수 있습니까?

분류에서Dev

함수의 반환 객체를 암시 적으로 캐스팅 할 때 성능 저하가 있습니까?

분류에서Dev

여러 반환 객체가있는 체인 된 AndReturn 표현식에서 객체를 반환 할 횟수 지정

분류에서Dev

참조 전달 매개 변수 반환 값에서 const int를 선언 할 수 있습니까?

분류에서Dev

배열 값을 기반으로 객체의 키를 강력하게 입력 할 수 있습니까?

분류에서Dev

R의 함수에 정의 된 모든 객체를 반환하는 방법이 있습니까?

분류에서Dev

객체 내부의 중첩 배열을 쉼표로 구분 된 하나의 연결된 문자열 값으로 어떻게 변환 할 수 있습니까?

분류에서Dev

Java에서 반환을 사용하지 않고 인수로 전달 된 객체에 값을 할당 할 수 있습니까?

분류에서Dev

두 클래스가 동일 할 때 객체를 다른 객체로 변환 할 수 있습니까?

분류에서Dev

동적으로 생성 된 다른 개체의 속성을 기반으로 개체 속성 값의 합계를 계산합니다.

Related 관련 기사

  1. 1

    일반 JSON 객체를 중첩 된 JSON 객체로 어떻게 변환 할 수 있습니까?

  2. 2

    TypeScript 객체를 일반 객체로 어떻게 변환 할 수 있습니까?

  3. 3

    반환 된 결과를 여러 값으로 제한 할 수 있습니다.

  4. 4

    반환 유형이 const 일 때 반환 된 값을 수정할 수있는 이유는 무엇입니까?

  5. 5

    피벗 함수를 사용할 때 분산 된 값의 합계를 반환 할 수 있습니까?

  6. 6

    Java에서 동적으로 객체 속성을 설정할 수 있습니까 (반사없이)?

  7. 7

    객체 함수 호출없이 (아마 계산 된) 속성 값을 얻을 수 있습니까?

  8. 8

    Typescript의 인수를 기반으로 키 값 쌍이있는 객체 반환

  9. 9

    Cython은 파이썬 객체를 const float로 변환 할 수 없습니다 *

  10. 10

    const 객체 함수를 반환 한 결과 인 const 객체에서 멤버 변수를 변경할 수있는 이유는 무엇입니까?

  11. 11

    템플릿 함수에서 반환 된 const 종속 이름, const는 어디로 갑니까?

  12. 12

    Javascript 및 / 또는 jQuery가 이런 방식으로 객체를 반환 할 수 있습니까?

  13. 13

    Typescript / Angular2에서 동적으로 유형이 지정된 개체를 어떻게 반환 할 수 있습니까?

  14. 14

    char *에 메모리를 할당 할 수 있지만 const char *로 반환 할 수 있습니까?

  15. 15

    Python3의 값이 아닌 객체 속성에 대한 링크를 어떻게 반환 할 수 있습니까?

  16. 16

    반환 된 속성 / 메소드를 JavaScript로 내보낼 수 있습니까?

  17. 17

    SQLite 쿼리에서 반환 된 열 값을 테이블 이름으로 사용할 수 있습니까?

  18. 18

    해당 객체가 const로 전달되는 동안 어떻게 벡터를 클래스의 멤버로 반복 할 수 있습니까?

  19. 19

    비동기 함수에서 반환 된 객체에서 "then"속성이 자동으로 액세스되는 이유는 무엇입니까?

  20. 20

    비동기 관계를 기반으로 Ember 데이터 모델에서 Ember.js 계산 속성을 어떻게 할 수 있습니까?

  21. 21

    함수의 반환 객체를 암시 적으로 캐스팅 할 때 성능 저하가 있습니까?

  22. 22

    여러 반환 객체가있는 체인 된 AndReturn 표현식에서 객체를 반환 할 횟수 지정

  23. 23

    참조 전달 매개 변수 반환 값에서 const int를 선언 할 수 있습니까?

  24. 24

    배열 값을 기반으로 객체의 키를 강력하게 입력 할 수 있습니까?

  25. 25

    R의 함수에 정의 된 모든 객체를 반환하는 방법이 있습니까?

  26. 26

    객체 내부의 중첩 배열을 쉼표로 구분 된 하나의 연결된 문자열 값으로 어떻게 변환 할 수 있습니까?

  27. 27

    Java에서 반환을 사용하지 않고 인수로 전달 된 객체에 값을 할당 할 수 있습니까?

  28. 28

    두 클래스가 동일 할 때 객체를 다른 객체로 변환 할 수 있습니까?

  29. 29

    동적으로 생성 된 다른 개체의 속성을 기반으로 개체 속성 값의 합계를 계산합니다.

뜨겁다태그

보관