void f(const std::string& s) {
...
}
f를 기능을 고려하는 것이 안전 다음과 같은 고정 된 문자열로 f를 호출하는 것입니다 : 당신이 함수가 반환 후 사용하지 않는 경우
f("abc");
void f(const std::string& s) {
...
}
f를 기능을 고려하는 것이 안전 다음과 같은 고정 된 문자열로 f를 호출하는 것입니다 : 당신이 함수가 반환 후 사용하지 않는 경우
f("abc");
"abc"
에서 암시 적으로 구성된 std::string
의 수명은 f()
에 대한 호출이 끝날 때까지입니다. f()
이 끝난 후에 그 참조를 다른 곳에 보관하지 않는 한 완벽하게 안전합니다. 함수가 호출 될 때, 임시 std::string
:
std::string const *pstr;
void f(std::string const &s)
{
s.length(); // safe. s has an instance backing
// it for the lifetime of this function.
pstr = &s; // still technically safe, but only if you don't
// dereference pstr after this function completes.
}
f("abc");
pstr->length(); // undefined behavior, the instance
// pstr pointed to no longer exists.
그것은 안전합니다.
이 때문에이 문자열 객체가 더 오래 있고 더 오래 사용 되더라도 다른 문자열 객체 (함수가 반환되기 전에)를 초기화하는 데이 함수를 사용하는 것이 안전합니다.
당신이 어딘가에 인수에 대한 참조 또는 포인터를 저장하고 주위에 당신이 함수에서 반환되면, 그것은 확인을해야 여전히 희망하지 않는 가정 함수가 실행되는 동안 주위에있는 함수가 만들어집니다.
안전하지도 안전하지도 않습니다. 당신이하고 싶은 일에 따라, 당신이 원하는 것을 할 수도,하지 않을 수도 있습니다. –
@ Petetecker 어떤 종류의 것들이 위험 할 수 있습니까? 나는 s를 바꾸려고하지 않는다. –