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'를 사용한 귀하의 예제는 비표준 Visual C++ 확장으로 인해 작동합니다. – StoryTeller
그래서'getStringA()'와 같은 함수에 대한 참조를 얻기 위해서는 항상'const'를 반환해야합니까? 예 : 'getStringB()'. – sharyex
'const '값을 반환하지 말 것을 제안합니다. 내 대답을 보라. – StoryTeller