C++ 11 lần đầu tiên giới thiệu hỗ trợ để xác định chữ mới thành C++ bằng phương tiện literals do người dùng xác định. Có C++ 11 hoặc sau đó cũng xác định trước hậu tố cho các số nguyên nguyên cố định chiều rộng cho các loại trong <cstdint>
?Các số nguyên nguyên có chiều rộng cố định trong C++?
Trả lời
số Tính đến C++ 14 hậu tố đen chỉ được xác định theo tiêu chuẩn được cung cấp bởi <chrono>
, <complex>
và <string>
tiêu đề trong thư viện chuẩn. Tiêu đề <chrono>
xác định h
, min
, s
, ms
, us
, ns
hậu tố cho thời lượng thời gian, <complex>
xác định i
, il
và if
hậu tố cho con số tưởng tượng, và <string>
xác định s
hậu tố cho basic_string
literals.
Tuy nhiên, người ta có thể dễ dàng xác định các chữ cố định chiều rộng của mình như thế này:
#include <cstdint>
constexpr std::int8_t operator "" _int8(unsigned long long v)
{ return static_cast<std::int8_t>(v); }
constexpr std::uint8_t operator "" _uint8(unsigned long long v)
{ return static_cast<std::uint8_t>(v); }
constexpr std::int16_t operator "" _int16(unsigned long long v)
{ return static_cast<std::int16_t>(v); }
constexpr std::uint16_t operator "" _uint16(unsigned long long v)
{ return static_cast<std::uint16_t>(v); }
constexpr std::int32_t operator "" _int32(unsigned long long v)
{ return static_cast<std::int32_t>(v); }
constexpr std::uint32_t operator "" _uint32(unsigned long long v)
{ return static_cast<std::uint32_t>(v); }
constexpr std::int64_t operator "" _int64(unsigned long long v)
{ return static_cast<std::int64_t>(v); }
constexpr std::uint64_t operator "" _uint64(unsigned long long v)
{ return static_cast<std::uint64_t>(v); }
constexpr std::int_fast8_t operator "" _int_fast8(unsigned long long v)
{ return static_cast<std::int_fast8_t>(v); }
constexpr std::uint_fast8_t operator "" _uint_fast8(unsigned long long v)
{ return static_cast<std::uint_fast8_t>(v); }
constexpr std::int_fast16_t operator "" _int_fast16(unsigned long long v)
{ return static_cast<std::int_fast16_t>(v); }
constexpr std::uint_fast16_t operator "" _uint_fast16(unsigned long long v)
{ return static_cast<std::uint_fast16_t>(v); }
constexpr std::int_fast32_t operator "" _int_fast32(unsigned long long v)
{ return static_cast<std::int_fast32_t>(v); }
constexpr std::uint_fast32_t operator "" _uint_fast32(unsigned long long v)
{ return static_cast<std::uint_fast32_t>(v); }
constexpr std::int_fast64_t operator "" _int_fast64(unsigned long long v)
{ return static_cast<std::int_fast64_t>(v); }
constexpr std::uint_fast64_t operator "" _uint_fast64(unsigned long long v)
{ return static_cast<std::uint_fast64_t>(v); }
constexpr std::int_least8_t operator "" _int_least8(unsigned long long v)
{ return static_cast<std::int_least8_t>(v); }
constexpr std::uint_least8_t operator "" _uint_least8(unsigned long long v)
{ return static_cast<std::uint_least8_t>(v); }
constexpr std::int_least16_t operator "" _int_least16(unsigned long long v)
{ return static_cast<std::int_least16_t>(v); }
constexpr std::uint_least16_t operator "" _uint_least16(unsigned long long v)
{ return static_cast<std::uint_least16_t>(v); }
constexpr std::int_least32_t operator "" _int_least32(unsigned long long v)
{ return static_cast<std::int_least32_t>(v); }
constexpr std::uint_least32_t operator "" _uint_least32(unsigned long long v)
{ return static_cast<std::uint_least32_t>(v); }
constexpr std::int_least64_t operator "" _int_least64(unsigned long long v)
{ return static_cast<std::int_least64_t>(v); }
constexpr std::uint_least64_t operator "" _uint_least64(unsigned long long v)
{ return static_cast<std::uint_least64_t>(v); }
constexpr std::intmax_t operator "" _intmax(unsigned long long v)
{ return static_cast<std::intmax_t>(v); }
constexpr std::uintmax_t operator "" _uintmax(unsigned long long v)
{ return static_cast<std::uintmax_t>(v); }
constexpr std::intptr_t operator "" _intptr(unsigned long long v)
{ return static_cast<std::intptr_t>(v); }
constexpr std::uintptr_t operator "" _uintptr(unsigned long long v)
{ return static_cast<std::uintptr_t>(v); }
Cảnh báo: Đoạn mã trên sẽ âm thầm đưa ra kết quả sai nếu sử dụng trên literals mà không phù hợp với unsigned long long
, cũng như tràn nếu giá trị chữ, không phù hợp với loại được yêu cầu, ví dụ 999_int8
. A better implementation (được cấp phép GPL-3) có thể sẽ phải phân tích ký tự chữ cái theo ký tự và static_assert
khi tràn, như this. Mặt khác của việc sử dụng các chữ được người dùng định nghĩa là người ta cần tiền tố hậu tố với dấu gạch dưới _
, vì hậu tố không có dấu gạch dưới được dành riêng cho tiêu chuẩn hóa tương lai theo §17.6.4.3.4.
- 1. Ba chiều các số nguyên trong C++
- 2. Định dạng chuỗi trong .NET: chuyển đổi số nguyên thành chuỗi có độ rộng cố định?
- 3. Xác định chiều rộng của chiều rộng cột rộng CSS3 DIV động cố định chiều rộng cột cố định
- 4. Định dạng số chiều rộng cố định python 3
- 5. Có số nguyên kích thước cố định trong GCC không?
- 6. Có lợi thế nào khi sử dụng các số nguyên không cố định (int, long) thay vì các số nguyên cố định (int64_t, int32_t) không?
- 7. Số nguyên lớn trong C#
- 8. Các loại số nguyên chiều rộng cố định có được đảm bảo là typedef cho tiêu chuẩn được xây dựng trong các loại không?
- 9. Có loại bool cố định chiều rộng nào trong tiêu chuẩn C++ không?
- 10. các số nguyên nguyên dài
- 11. file Parse chiều rộng cố định
- 12. Định dạng Python Số nguyên thành các chuỗi có độ dài cố định
- 13. Ghép số nguyên trong C#
- 14. C integer overflow hành vi khi giao đến số nguyên chiều rộng lớn hơn
- 15. CSS - chiều rộng cố định span/div
- 16. Lấy Chiều cao và Chiều rộng Hình ảnh làm giá trị số nguyên?
- 17. Chiều rộng cố định của cột jqgrid?
- 18. Chiều rộng cố định cho cột đầu tiên của bảng
- 19. Hai cột, bên trái có chiều rộng cố định, phải với chiều rộng động
- 20. Có phải tăng số nguyên nguyên tử trong x86 không?
- 21. Pandas: biểu đồ có chiều rộng cố định
- 22. Chiều rộng cột cố định trong bảng HTML
- 23. Cách hay để "nối thêm" các số nguyên trong C#?
- 24. C++ Kiểm tra số nguyên.
- 25. Lua - Định dạng số nguyên
- 26. Làm thế nào để buộc số học chưa ký trên các loại chiều rộng cố định?
- 27. Phân tích cú pháp các số nguyên trong C++
- 28. đọc số không rõ các số nguyên từ stdin (C)
- 29. Chiều rộng nhãn trục y cố định trong Highcharts
- 30. Byte thành số nguyên trong C#
Làm thế nào về [ném một ngoại lệ trên tràn, làm cho trình biên dịch thất bại] (http://stackoverflow.com/a/8626450/256138)? – rubenvb