私は調査autoしましたが、初期化された値から型を推測することを知っています。の使用に関するガイドラインを作成しようとするとauto、以下のステートメントをルールとして記述できますか?
auto &&変更可能なすべての値 (ユニバーサル参照であるため、r 値と l 値) に使用します。auto &&読み取り専用の値であっても、auto可能な限り使用してください (コーディング スタイルは個人の好みです)。
編集
class Test
{
public:
Test() = default;
Test(const Test&) = default;
Test(Test&&) = default;
int i = 1;
};
Test getObj()
{
return Test();
}
Test& getObjByRef()
{
static Test tobj;
return tobj;
}
const Test getObjConst()
{
return Test();
}
int main()
{
auto && obj1 = getObj();
obj1.i = 2;
std::cout << " getObj returns: " << getObj().i << std::endl;
auto&& obj2 = getObjByRef();
obj2.i = 3;
std::cout << " getObjByRef returns: " << getObjByRef().i << std::endl;
auto && obj3 = getObjConst();
//obj3.i = 4; => //Error C3490 'i' cannot be modified because it is being accessed through a const object
return 0;
}
したがって、上記の例auto &&では、3つの関数すべてに使用しました
getObjgetObjByRefgetObjConst
期待どおりに動作します。これで、次のように結論付けることができます。
auto &&任意の値を保持 (初期化) するために使用できます。ORauto &&可能な限りあらゆる場所 を使用できます。
このアプローチの落とし穴はありますか?