VS2010에서이 코드를 실행할 때 NRVO가 적용되지 않습니다.왜 NRVO가 여기에 적용되지 않습니까?
#include <stdio.h>
class A
{
public:
A() { printf("I am in constructor\n"); }
A(const A& a) { printf("I am in copy constructor\n"); }
~A() { printf("I am in destructor\n"); }
int i;
};
A f(int j)
{
A a;
if (j) return a;
a.i = j;
return a;
}
int main()
{
A a;
a = f(5);
}
편집 : 이것은 소멸자와 관련이 있습니다. 내가 그 라인을 주석 처리 할 때 NRVO가 사용됩니다. 근데 왜 이래?
어떤 최적화 수준을 사용하고 있습니까?또한 단일 반환이있는 경우 NRVO를 적용하는 것이 훨씬 간단하며,이 경우에는 'if'를 'trivial'로 대체하는 것이 더 간단합니다. 'if (! j) ai = j;'그러면 적용 가능성이 높아집니다 . –
여기를보십시오, http://msdn.microsoft.com/en-us/library/ms364057%28v=vs.80%29.aspx NRVO의 한계가 있습니다. 최적화가 활성화되어 있습니까? – kassak
@ DavidRodríguez-dribeas 모든 최적화 옵션을 시도해 본 결과는 같습니다. – Belloc