Mã sau hoạt động tốt, nhưng tại sao mã này chính xác? Tại sao con trỏ "c_str()" của tạm thời được trả về bởi foo() hợp lệ? Tôi nghĩ, rằng tạm thời này đã bị phá hủy khi bar() được nhập vào - nhưng nó không có vẻ như thế này. Vì vậy, bây giờ tôi giả định rằng tạm thời trở lại bởi foo() sẽ bị phá hủy sau khi cuộc gọi đến bar() - là điều này đúng? Và tại sao?Thời gian tồn tại của thời gian
std::string foo() {
std::string out = something...;
return out;
}
void bar(const char* ccp) {
// do something with the string..
}
bar(foo().c_str());
cũng lưu ý rằng 'c_str()' chỉ trả về một con trỏ * tạm thời *. Tuổi thọ của nó không nói gì về tuổi thọ của dữ liệu mà nó chỉ ra. – jalf
'c_str()' không trả về tạm thời. Nó trả về một rvalue của kiểu con trỏ. Các giá trị của kiểu con trỏ không phải là các đối tượng. Họ không có cả đời. –