Khác biệt giữa bản sửa đổi của “Kiểu mạnh và kiểu yếu”

Nội dung được xóa Nội dung được thêm vào
Dòng 18:
Một ví dụ khác: GCC miêu tả việc này là ''chơi kiểu'' (type-punning) và cảnh báo rằng nó sẽ ''bẻ vỡ tính chặt chẽ trong việc [[ánh xạ]] dữ liệu''. [[Thiago Macieira]] nêu ra nhiều vấn đề có thể xảy ra khi việc chơi kiểu khiến [[trình biên dịch]] sai lầm trong việc tối ưu hoá chương trình xuất.<ref>[http://blog.qt.digia.com/blog/2011/06/10/type-punning-and-strict-aliasing/ Type-punning and strict-aliasing, Thiago Macieira]</ref>
 
Tuy việc tập trung vào cú pháp dễ hơn, nhưng lý luận của Macieira thực sự là về ngữ nghĩa chương trình. Có nhiều ngôn ngữ cho phép việc chuyển kiểu ngầm, nhưng khác là theo một cách đảm bảo tính an toàn về kiểu. Ví dụ: cả C++ và C# cho phép chương trình định nghĩacnghĩa các toán tử để chuyển đổi giá trị từ kiểu này sang kiểu khác theo một cách có ý nghĩa (như từ số thực sang số nguyên: ta tiến hành làm tròn, kiểm tra phạm vi giá trị, tạo ra biến nguyên mới và gán giá trị đã xử lý). Khi một trình dịch gặp thao tác chuyển như vậy, nó coi thao tác này như một phép gọi hàm thông thường. Trái lại, việc chuyển một giá trị sang kiểu ''void*'' của C là một thao tác không an toàn nhưng trình biên dịch lại không phát hiện được.
 
=== Con trỏ ===
Dòng 26:
=== Kiểu hợp nhất (union) ===
 
Một số ngôn ngữ lập trình cho phép sử dụng [[Kiểu và khai báo biến trong C#Kiểu hợp nhất kiểu hợp nhất|Kiểu và khai báo biến trong C# Kiểu hợp nhất kiểu hợp nhất]]. Kiểu này cho phép một giá trị thuộc một kiểu được dùng như giá trị thuộc kiểu khác. Trong bài viết có tựa đề ''A hacked Boolean'', Bill McCarthy mô tả cách mà giá trị kiểu boolean trong [[.NET Framework|.NET]] có thể bị "hỏng", khiến cho hai giá trị đều là "đúng" vẫn có thể bị coi là khác nhau.<ref>[http://msmvps.com/blogs/bill/archive/2004/06/23/8730.aspx A hacked Boolean]</ref>
 
=== Kiểm tra kiểu động ===