4
私が理解した理由から、変数を値への戻り値として定義すると、実際に参照にバインドされた有効期間を持つ一時オブジェクトへの参照があり、その参照はconst
と宣言されていなければなりません。関数への参照値と自動返す
これは、const
のように定義されていないため、次の例のa2
が自動的にconst
になるのはなぜですか?
非const参照をその一時オブジェクトにバインドすることができない場合は、一時オブジェクト自体をデフォルトでconst
にしてください。それを非constにする理由は何ですか?
#include <string>
std::string getStringA()
{
std::string myString = "SomeString";
return myString;
}
const std::string getStringB()
{
std::string myString = "SomeString";
return myString;
}
int main()
{
const std::string temp;
std::string &a1 = getStringA(); // std::string& a1, warning C4239 : nonstandard extension used : 'initializing' : conversion from 'std::string' to 'std::string &'
auto &a2 = getStringA(); // std::string& a2, warning C4239 : nonstandard extension used : 'initializing' : conversion from 'std::string' to 'std::string &'
const std::string &a3 = getStringA(); // all good
auto &b1 = getStringB(); // const std::string& b1
auto &b2 = temp; // const std::string& b2
}
'getStringA'を使用したあなたの例は、非標準のビジュアルC++拡張のためにのみ機能します。 – StoryTeller
したがって、 'getStringA()'のような関数への参照を得るためには、常に 'const'を返す必要がありますか?例えば'getStringB()' – sharyex
私は決して 'const'値を返すことを勧めません。私の答えを見てください。 – StoryTeller