亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標題:
為什么 沒調用 拷貝構造函數(shù)
[打印本頁]
作者:
homerzhou
時間:
2014-01-11 16:10
標題:
為什么 沒調用 拷貝構造函數(shù)
class Person
{
public:
Person(){cout << "construct"<< endl;}
Person(const Person& p1) { cout << "copy" << endl; }
};
Person fun()
{
Person p1;
return p1;
}
int main()
{
fun();
return 0;
}
復制代碼
為啥 不調用 拷貝構造函數(shù),很奇怪
可是如果 fun 函數(shù) 寫成這樣
Person fun()
{
Person *p1 = new Person;
return *p1;
}
復制代碼
就調用了,這尼瑪 奇怪的
作者:
Fomalhaut2
時間:
2014-01-11 16:22
上面那個可能是被編譯器優(yōu)化掉了。
作者:
homerzhou
時間:
2014-01-11 16:34
對的,剛 知道 答案, 被編譯器 優(yōu)化掉的,這 叫 RVO的名字
回復
2#
Fomalhaut2
作者:
math_cai
時間:
2014-01-11 17:09
GNU/Linux GCC(包括C++擴展) 默認使用cdecl調用約定,參數(shù)通過棧來傳遞,返回值放在EAX寄存器中。
如果返回數(shù)據(jù)長度大于EAX的長度,且返回的數(shù)據(jù)是棧上的變量,GCC會做特殊處理來避免一次內存拷貝:
返回值的內存由調用者分配,將該內存地址放到EAX中返回。(相當于將返回值的內存當作一個隱含的參數(shù)通過棧來傳遞給調用者)
作者:
注冊個ID太難
時間:
2014-01-11 21:41
回復
4#
math_cai
作者:
md5_crc4
時間:
2014-01-17 14:55
是優(yōu)化的吧。
比如
int main()
{
int a; //這樣的也不生成代碼,如果弄成 volatile int a; 它可能就ok了。
}
我是一只小小小小鳥。 。。感謝您的分享。。
歡迎光臨 Chinaunix (http://www.72891.cn/)
Powered by Discuz! X3.2