약 의 값인 및 lvalue에 대해 몇 시간을 보냈습니다. 여기에 내가C++ 03의 반환 값
int main()
{
//.....
Foo foo = Bar1();
foo = Bar2();
//......
}
Foo Bar1()
{
//Do something including create foo
return foo;
}
Foo& Bar2()
{
//Do something including create foo
return foo;
}
는 C++ 03에서 Bar1()
가 (단지 반환 전) 반환 객체를 복사 한 다음 복사 된 객체의 주소를 반환 이해하는 것입니다; 파괴 될 개체의 낭비적인 복사본을 실행합니다. Bar2()
은 함수 내에서 생성 된 객체를 반환합니다.
C++ 11에서, Bar1()
및 Bar2()
은 본질적으로 동일합니다 (또한 C++ 03의 Bar2()
과 동일).
맞습니까? 그렇지 않다면 자세히 설명하십시오.
나는 당신의 질문에 대답했지만, 나는 당신의 코드가 의미하는 것으로 실제로 혼란 스럽다. 'Bar1' /'Bar2'는 앞에서 선언 한'Foo' 타입의 전역 값을 어떻게 든 리턴합니까? 그런데'Foo foo = Bar1()'이 부정확 할 것입니다 ... – CygnusX1
각 함수의 시작 부분에 (적어도)'Foo foo;'를 추가하고'a'와'b' 바깥에 변수의 이름을 지정하십시오 (왜냐하면 'Foo foo'를 두 번 정의 할 수 없음) – leemes
코드를 명확하게해야합니다. 이 시점에서 그것은 완전히 엉망이며, 질문은 완전히 무의미합니다. 'Foo foo'를 두 번 정의하는 것은 불법입니다. 또한'foo'는 위에서 선언 한'foo'와 같은 함수에서 리턴됩니까? (즉, 객체 자체를 초기화하려고합니까?) – AnT