C++의 함수 반환 유형에 대한 질문이 있습니다.C++에서 함수의 익명 인스턴스/값 반환
왜 return pair<int, int>(1, 1);
과 return vector<int>(3, 3);
이 작동합니까? return int 1;
이 작동하지 않기 때문에 반환 값처럼 반환 값으로 가져 오기 전에 로컬 인스턴스 var를 생성해서는 안된다.
// ...
int fun1() {
// return int 1;
int a = 1;
return a;
}
pair<int, int> fun2() {
return pair<int, int>(1, 1);
}
vector<int> fun3() {
return vector<int>(3, 3);
}
int main(){
cout << fun1() << endl;
cout << fun2().first << endl;
cout << fun3()[1] << endl;
return 0;
}
반환하는 스타일은 특정 생성자가있는 클래스 인스턴스에만 적용 할 수 있습니까? 아래 예제는 작동 할 수 있습니다. 확인 또는 참조 자료를 찾고 있습니다.
애플 LLVM 버전 6.0 (그 소리-600.0.56) (LLVM의 3.5svn 기준) 대상 :
class A { public: int a; A(int a_) : a(a_) {}; }; A fun4() { return A(1); }
코드 샘플은 테스트 x86_64에-사과 darwin14.0.0에게 스레드 모델을 : POSIX
나는 이동 생성자와 RVO를 가져 오는 것이 혼란을 야기하고 어떤 것도 명확하게 밝히지 않을뿐입니다. –
@JonathanWakely : 반대 의견에는 사람들이'std :: cout << "복사를 \ n"; "하고 복사 생성자에 무수한 질문이있어서 가치로 돌아올 때 왜 사용되지 않는지 궁금합니다. "네가 그렇게한다면 저주받을거야, 그렇지 않으면 저주받을거야"라고 상황 IMHO. –