Trong khi tôi đã được đọc về chuyển đổi kiểu dữ liệu, tôi thấy ví dụ này:Trong C++, chúng ta có thể sử dụng {} để đúc kiểu C?
void intval()
{
for (char c; cin >> c;)
cout << "the value of '" << c << "' is " << int{c} << '\n';
}
Tôi biết rằng chúng ta có thể đúc bằng:
int(c)
(int) c
static_cast<int>(c)
Nhiệm vụ của tôi ions:
Q1: Có phải int{c}
cách khác để truyền các loại dữ liệu?
Q2: Sau một số nghiên cứu trên mạng, tôi biết rằng C++ đúc là khác nhau và nó có trình biên dịch kiểm tra khả năng đúc tại thời gian biên dịch, nhưng sự khác biệt giữa 1 và 2 là gì? Và làm thế nào int{c}
là khác nhau nếu nó chỉ là một cách đúc?
Q3: Có cách nào khác để chuyển đổi/truyền một cách rõ ràng không?
Tôi nghĩ rằng các dấu ngoặc nhọn phải làm với khởi tạo danh sách, xem câu trả lời này http://stackoverflow.com/a/18222927/3110529 TL; DR: Danh sách khởi tạo không cho phép thu hẹp (§iso.8.5. 4) có nghĩa là nó sẽ bắt các chuyển đổi loại không an toàn. – Dillanm
Cụ thể, nếu 'd' là' double' và 'double' có cùng kích thước với' uint64_t', 'static_cast (d)' và 'reinterpret_cast (d)' chuyển đổi theo các cách hoàn toàn khác nhau. C-style phôi không có tính linh hoạt đó; bạn sẽ cần phải gõ-pun thông qua một liên minh hoặc con trỏ để diễn giải lại các bit. –
Davislor