Tôi đã C++ mã sau:Cast trong nhà xây dựng cho loại C++
#include <iostream>
#include <string>
int main(int argc, char* argv[])
{
const std::string s1 = "ddd";
std::string s2(std::string(s1));
std::cout << s2 << std::endl;
}
Kết quả là: Tại sao? Khi tôi sử dụng Wall cờ, trình biên dịch ghi cảnh báo: địa chỉ của 'std :: string s2 (std :: string)' sẽ luôn luôn đánh giá là 'true'
Nhưng mã này:
#include <iostream>
#include <string>
int main(int argc, char* argv[])
{
const std::string s1 = "ddd";
std::string s2((std::string)(s1));
std::cout << s2 << std::endl;
}
kết quả: ddd
Đó là bình thường kết quả
Không thể bạn chỉ cần thực hiện dòng thứ hai 'std :: string s2 (s1); 'Tại sao bạn cần phải bao gồm 'std :: string' thứ hai? – rhololkeolke
Tại sao tạo bản sao trung gian? Tại sao không 'std :: string s2 = s1;'? –
@Oscar: Phiên bản của bạn tạo biến khởi tạo mặc định trung gian và sau đó sao chép thông qua toán tử gán bản sao. Phiên bản chính xác mà không có bất cứ điều gì trung gian là rho. – Xeo