以下のコードを動かしたところ大量の文字列が出力され、エラーとなります。
cpp
1#include <iostream> 2#include <shellapi.h> 3#include <vector> 4#include <algorithm> 5#include <string> 6#include <type_traits> 7#include <thread> 8 9using namespace std; 10 11decltype(auto) retVal(string str) 12{ 13 string str_cp = str; 14 return move(str_cp); 15} 16 17int main() { 18 19 string str = "decltype test"; 20 cout << retVal(str) << endl; 21}
以下のようにmoveを外す、または戻り値をautoにしたところ、正常な挙動となりました。
cpp
1#include <iostream> 2#include <shellapi.h> 3#include <vector> 4#include <algorithm> 5#include <string> 6#include <type_traits> 7#include <thread> 8 9using namespace std; 10 11decltype(auto) retVal(string str) 12{ 13 string str_cp = str; 14 return str_cp; 15} 16 17int main() { 18 19 string str = "decltype test"; 20 cout << retVal(str) << endl; 21}
cpp
1#include <iostream> 2#include <shellapi.h> 3#include <vector> 4#include <algorithm> 5#include <string> 6#include <type_traits> 7#include <thread> 8 9using namespace std; 10 11auto retVal(string str) 12{ 13 string str_cp = str; 14 return move(str_cp); 15} 16 17int main() { 18 19 string str = "decltype test"; 20 cout << retVal(str) << endl; 21}
挙動の違いはなぜ起こったのでしょう?
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。