當我在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'代替:if(!j)ai = j;'那麼它將有更高的應用機會。 –
看這裏,http://msdn.microsoft.com/en-us/library/ms364057%28v=vs.80%29.aspx有NRVO的限制。你確定,你有優化啓用? – kassak
@DavidRodríguez-dribeas我嘗試過所有的優化選項,結果是一樣的。 – Belloc