在 Linux 64 位和 Windows MinGW 上,长很可能是 64 位宽。在 Visual Studio 64 位上,长为 32 位宽。假设我有一个固定的 32 位或 64 位整数类型,当我调用 printf() 之类的东西时,我必须指定正在读取的类型。如果我记错了,那就是UB。所以我的 32 位或 64 位类型并不是专门的 int、long 或 long long,而是上帝知道的类型。
int32_t my_number;
fprintf("%l", my_number); // LONG IS STIPULATED TO BE "AT LEAST" 32-BITS BUT NOT GUARANTEED
int64_t my_number;
fprintf("%ll", my_number); // LONG LONG IS STIPULATED TO BE "AT LEAST" 64-BITS BUT NOT GUARANTEED
同样的情况也适用于 ltoa() 等其他函数。我想问题在于这样一个事实:从函数的角度来看,它只知道一个“指针”,并且只是根据程序员调用的函数全力运行,这看起来真的很疯狂,容易出错且危险,更不用说事实上,如果您在代码中的任何地方更改调用这些函数的其中一种类型,那么您的计算机就会繁荣起来。
考虑到类型及其原始大小的差异,您应该如何使用这些函数?
你应该如何应对你可能会在某个地方改变你的类型的现实?
我应该使用这些功能吗? Rust 的人们一直在谈论 C++ 是多么不安全,但与此相比,它是一个充满泡沫的乌托邦天堂。我通常对 C++ 进行编程,是否最好遍历所有类型并模板化所有内容,以便每种类型都调用 write 函数?这是否需要检查类似的内容:
像这样:
template <typename T>
void value_to_ascii(const char* buffer, int max_size, const T& val)
{
if constexpr(std::is_same_v<T, long>)
ltoa();
else if constexpr(std::is_same_v<T, int>)
itoa();
}
考虑到类型及其原始大小的差异,您应该如何使用这些函数?
使用适当的格式。
类型 | 格式 | 注释 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
你应该如何应对你可能会在某个地方改变你的类型的现实?
您可以创建与
int32_t
相同的方法:typedef,加上格式宏。