01/10/2018, 09:23
Thắc mắc về bộ nhớ khi ép kiểu trong C++
Giả sử mình có 2 dòng lệnh sau:
int x = 5;
(float)x;
Các bạn cho mình hỏi khi thực hiện dòng lệnh thứ hai (float) x; thì máy tính sẽ tự tạo ra vùng nhớ mới để lưu trữ giá trị của số nguyên x vừa chuyển thành số thực hay nó trực tiếp mở rộng vùng nhớ cũ của số nguyên x để lưu trữ?
Bài liên quan
Dòng lệnh thứ hai của bạn được gọi là Dummy code và nó sẽ bị bỏ qua khi comlipe làm việc. Về cơ bản thì việc ép kiểu có hai nguyên tắc. Một là phải có nơi chứa nó, hai là nó không được phép làm ảnh hưởng đến dữ liệu của biến mà nó thực hiện ép. Vậy nên điều ở dưới sẽ không xảy ra.[quote=“phamlamnd, post:1, topic:45410”]
trực tiếp mở rộng vùng nhớ cũ của số nguyên x để lưu trữ
[/quote]
Và điều ở dưới chỉ xảy ra khi viết lại code như sau:
Thêm nữa là câu này chỉ đúng khi bạn là người khai báo vị trí mới cho nó như trên:
Cảm ơn bạn đã chỉ giáo.
ép kiểu không phải là phép gán mà là một phép tính.
(float)x
có thể được diễn giải dưới dạng hàm như sau:chạy xong hàm, trả về giá trị của y xong, nếu không dùng biến nào đó để lưu lại (ví dụ
a = (float)b
) là mất luôn. Tuy nhiên ép kiêu không phải là hàm, bạn mà để trống không một mình một lệnh thế kia là chương trình báo lỗi liền :))Cảm ơn bạn, nhưng mình để trống vẫn được mà.
Cái đó cần chút kiến thức liên quan đến compiler nhưng mà vấn đề cụ thể là đoạn code kia của bạn nó không có ý nghĩa gì cả.
Uk, mình cũng chạy thử, đúng là Visual C++ không báo lỗi. Nó không có ý nghĩa gì, tuy nhiên nếu ép kiểu không thành công thì có thể gây lỗi gì đó