[C++11] 함수에서 우측값 참조로 반환한 값을 변수가 받게하면 안 되는데.. 어떻게 해야하나요?


(adzoo) #1

std::string&& Test()
{
return std::move(std::string(“dfsfsd”));
}

int main () {

std::string&& test = Test(); // test = ""
std::string test2 = Test(); // Exception thrown: read access violation.

}


(adzoo) #2

test 변수가 우측값 참조를 이용해서 “dfsfsd” 문자열을 받게 하고 싶은데 저 두경우 다 안되더라구요.
방법이 없을까요?


(L) #3

참고하시기 바랍니다


(L) #4

결론은 함수 정의시

std::string && Test() &&
{
...
}

처럼 하시면 됩니다


(adzoo) #5

정말 감사합니다! 딱 원하는 글이네요.


(adzoo) #8

gds

컴파일이 안되는데 왜 이러는거죠?
VS2017입니다.


(L) #9

클래스의 멤버함수에만 허용되는거라 그렇습니다.
const-qualifier 처럼요.


(L) #10

그리고 지역변수를 반환한다면 레퍼런스로 반환하시면 안됩니다. 지역변수는 그 함수가 끝나면 소멸해버리기 때문에, 값으로 반환해야 합니다.


(adzoo) #11

아!! 이해했습니다!
정말 감사합니다!