1. 程式人生 > >C++11智慧指標和引用

C++11智慧指標和引用

最近在學習課程的時候發現一個很困惑的問題,上程式碼

class DataHeader;

class LoginResult:public DataHeader;

typedef std::shared_ptr<DataHeader> DataHeaerPtr;
//原型 
void addSendTask(ClientSocketPtr& pClient, DataHeaderPtr& header)
//未報錯呼叫
DataHeaderPtr ret = std::make_shared<LoginResult>();
pCellServer->addSendTask(pClient, ret);
//報錯呼叫
auto ret = std::make_shared<LoginResult>();
pCellServer->addSendTask(pClient, (DataHeaderPtr)ret);

#錯誤程式碼:(DataHeaderPtr)ret

錯誤型別:
非常量引用的初始值必須為左值。
測試環境為vc2017。
疑問:
學習的電子課件中為vc2013,這裡並不會報錯。在vc2017匯入課件中的原始碼這裡也不會報錯。這是什麼原因????????????