私は調査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つの関数すべてに使用しました
getObj
getObjByRef
getObjConst
期待どおりに動作します。これで、次のように結論付けることができます。
auto &&
任意の値を保持 (初期化) するために使用できます。ORauto &&
可能な限りあらゆる場所 を使用できます。
このアプローチの落とし穴はありますか?