01/10/2018, 14:14
Có thể ép kiểu số thực thành số nguyên dùng static_cast với auto được không?
Chào mọi người. Có thể đây là một câu hỏi ngu, nhưng mình đã thử tìm google nhưng không có kết quả gì.
Mình có tìm hiểu, muốn ép kiểu thực thành nguyên thì
int d = static_cast<int>(f);
long long lld = static_cast<long long>(f);
...
Tuy nhiên vì 1 số mục đích nên mình muốn static_cast tự động ép kiểu theo biến đã khai báo sẵn.
INT_TYPE d; // không biết, và cũng không muốn biết d là kiểu nguyên gì
// 1 đoạn code rất dài
d = static_cast<...>(f)
Bình thường người ta hay dùng auto gần như để tự xác định kiểu của biến. Vậy thì có thể dùng auto trong trường hợp trên không?
Bài liên quan
typedef
điauto nó phải biết được kiểu dữ liệu của vế phải trước tại quá trình compile
// by someone
Trường hợp bạn sử dụng cast thì auto nó tự lấy cái decltype của cái <| decl |> làm kiểu dữ liệu.
Việc dùng static_cast (các loại hàm cast mặc định) trong C++ giúp chương trình an toàn hơn.
Bạn có thể làm như @Florastamine hoặc có một cách khác là khai báo sẵn biến mà bạn muốn cast dữ liệu sang, sau đó dùng decltype để cast ngược lại.
// Kiểu này thì xấu, tuy nhiên biết đâu có khi xài
ULL hay LLU đều như nhau cả. Kì cục ghê.
Dùng typedef có sợ bị dính vào các trường hợp nguy hiểm không? Kiểu như
ấy.
Mình chưa hiểu trường hợp nguy hiểm là sao?
typedef
sẽ lấy cái đoạnTEXT
ở cuối cùng làm kiểu dữ liệu.http://en.cppreference.com/w/cpp/language/typedef
Mình từng code
thì bị báo lỗi ở chỗ
int main()
, nên mình sợ nếu sử dụng typedef thì sẽ dính vào trường hợp như vừa rồi; mình vẫn chưa thực sự thông cách typedef của @Florastamine lắm.À à, hiểu rồi, mình chưa đọc hết dòng
Việc bạn thực hiện typedef ghi đè lên một kiểu có sẵn nên compiler nó báo lỗi là đương nhiên rồi.
Cách sử dụng:
Đúng là kiểu này xấu thật, nhưng mình nghĩ áp dụng cách của bạn là ổn thoả nhất. Cảm ơn bạn nhiều <3
A
decltype
hay nè, nhưng trường hợp này e là lấy dao mổ trâu giết gà :’(