Tôi nghĩ rằng đoạn mã sau sẽ tạo ra một lỗi:Chuyển đổi từ const char * để std :: string const &
#include <iostream>
#include <string>
static void pr(const std::string &aStr)
{
std::cout << aStr << "\n";
}
int main(void)
{
const char *a = "Hellu";
pr(a);
return 0;
}
Nhưng gcc 4.1.2 biên dịch nó successuflly.
Có phải đó là hàm tạo của std :: string nhận được trong cách, tạo ra một thể hiện của std :: string?
Tôi tin là không nên, bởi vì tham chiếu chỉ là một bí danh cho một biến (trong trường hợp này, không có biến kiểu std :: chuỗi tham chiếu đang đề cập đến).
Có ai ở đó để giải thích lý do mã biên dịch thành công không?
Xin cảm ơn trước.
Interststing sự kiện. Một là học tập hàng ngày;). Tôi đã không nhận được câu thứ hai của bạn mặc dù. Bạn có nghĩa là nếu tiêu đề chức năng sẽ là 'void pr (std :: string & aStr)' xây dựng một tạm thời (bằng cách ngụ ý) là không thể bởi standart? – Paranaix
@Paranaix: Đúng - 'pr (std :: string &)' sẽ không thể chấp nhận đối tượng tạm thời. –
@JerryCoffin, sau đó, có cách nào để giữ trình biên dịch không tạo ra một cá thể tạm thời không? – orchistro