參照以下代碼:C++函數和右值混亂
// Example program
#include <iostream>
#include <string>
using namespace std;
struct S
{
S()
{
cout << "ctor\n";
}
S(S&& rhs)
{
cout << "called move\n";
}
};
S goo()
{
S a;
return a;
}
int main()
{
S&& goo();
cout << "before construction\n";
S a = goo();
}
//http://thbecker.net/articles/rvalue_references/section_05.html
爲什麼是代碼調用move constructor
而不是功能S goo()
?如果你註釋掉第一行,那麼它不會。
爲什麼S goo()
的返回類型根據main
的第一行而不同?我不認爲這甚至應該編譯,但這裏編譯 http://cpp.sh/22zeq
(上wandbox不會編譯:https://wandbox.org/permlink/3YxBdcWs91FRiODG)
在閱讀這裏的例子:http://thbecker.net/articles/rvalue_references/section_05.html 當我偶然發現了這個
你覺得呢'S &&咕();在主'呢? – SergeyA
@SergeyA這裏沒有'S && goo()'的定義,所以它是如何工作的? – PYA