Liệu sản phẩm C++ mã sau tốt được hình thành:std :: string :: c_str() và temporaries
void consumer(char const* p)
{
std::printf("%s", p);
}
std::string random_string_generator()
{
// returns a random std::string object
}
consumer(random_string_generator().c_str());
Tôi có vấn đề với nó là, sau khi tạo đối tượng std :: string tạm thời và tham gia con trỏ c_str(), không có gì ngăn cản std :: string object khỏi bị phá hủy (hoặc có thể tôi là sai?). Bạn có thể vui lòng chỉ cho tôi tiêu chuẩn, nếu mã là OK mặc dù tất cả mọi thứ. Nó hoạt động, khi tôi thử nghiệm với g ++.
bạn có thể cung cấp một gợi ý liên quan đến việc C++ 03 hoặc C++ 11 tiêu chuẩn xin vui lòng? – user1095108
Thời gian tồn tại tạm thời được xác định trong §12.2. (Mục 12 là có tiêu đề "Chức năng thành viên đặc biệt", không chính xác nơi bạn muốn mong đợi tìm kiếm thời gian tồn tại của thời gian, nhưng đó là nơi mà nó có.) –
@ user1095108 và tuổi thọ của các đối số chức năng có thể thu được từ § 3.2.2 và §3.7.2 trong tiêu chuẩn C++ 03. – juanchopanza