- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
作为引用,我在 C++11 中编译。
我开始使用棋盘的位图表示作为以棋子为中心的方法来编写国际象棋引擎。似乎要使用的合适类型是 uint64_t ,但是,在网上搜索了很多之后,我有点不确定这里的“最佳实践”。
我开始为游戏板定义 .hpp 文件。首先,我对不同代码似乎表现出的相似行为感到困惑。
#include <cstdint>
uint64_t board;
和
#include <cstdint>
std::uint64_t board;
两者都编译得很好。两者有什么区别?这个比那个好吗?
此外,我注意到我什至不需要包含 cstdint 就可以使用 uint64_t :
#include <iostream>
uint64_t board;
和
#include <iostream>
uint64_t std::board;
两者都编译得很好,就像上面的 2 个 cstdint 示例一样。因此,我很困惑 uint64_t 应该如何在 C++11 中使用,以及为什么所有这 4 个示例都做完全相同的事情。有人告诉我你想使用 cstdint ,但似乎 iostream 也提供了类型 def ?是否有“最佳/最安全”的特定方式(例如在命名空间冲突方面)?
最佳答案
<cthing>
头文件作为其 C 遗产的一部分存在于 C++ 中。标准库不是重新发明轮子,而是重用 C 标准库的这些有用部分。现在,不同之处在于标题被重命名,并且它们必须在命名空间 std
中定义它们的符号。 .他们还可能将它们添加到全局命名空间。请注意,他们可以这样做,而不是必须。
这是因为这些头文件(作为实现细节)将包含纯 C 头文件 <thing.h>
并定义 std::
就全局符号而言。但这不是你可以依赖的。标准库的实现者有一天可能会决定不再那样做。如果您包括 cstdint
并使用了uint64_t
而不是 std::uint64_t
,您的程序可能会随机停止构建成功。
您拥有的唯一保证是 std
中的符号命名空间将存在。所以你应该使用这些符号而不是全局符号。
现在,作为其自身实现的一部分,标准库可以在自身内部交叉包含自己的 header 。您的版本很可能包含 <cstdint>
为了实现<iostream>
.但同样,这是一个实现细节,而不是 C++ 标准的硬性要求。如果您的标准库版本发生更改,并且不再更改,您的代码将无法构建。
总而言之,让您的代码在不同的编译器和标准库实现之间尽可能可移植:
<cstdint>
并使用它在命名空间 std
中定义的符号,这些都是必须存在的。1(1) 从技术上讲,允许未定义固定宽度整数类型。这是因为标准知道并非所有平台都可以定义所有平台。实际上,您可以在现代台式机上使用它们。
关于c++ - 在 C++ 中正确使用/包含 uint64_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44667971/
我有以下代码 unsigned int headerbytes = 0U; headerbytes = (unsigned int*)strtoull(packet_space->header
我有这段无法编译的代码: public struct MyStruct { private fixed uint myUints[32]; public uint[] MyUints
在 Go 中,从函数返回哪个更有效:返回 uint 还是返回 *uint? 该函数在 cpu 密集型库的内部 for 循环中调用。 最佳答案 一般来说,只要效率是个问题,您就应该运行基准测试。 让我们
int 加上 unsigned int 返回一个 unsigned int。应该这样吗? 考虑这段代码: #include #include #include class test {
我正在尝试从可通过 URL 访问的内容中初始化一个字符串: actualresponse.response = String(contentsOfURL: url, usedEncoding: NSU
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 提供事实和引用来回答它. 1年前关闭。 Improve this
我从函数 Swift 得到类型为 UnsafeMutablePointer 的结果 我可以把它转换到UInt吗? ? 最佳答案 只需使用memory 属性来访问底层数据。 let ptr: Unsaf
我深入了解了 List并发现了以下代码: public T this[int index] { get { // Following trick can red
我在 this page on bit twiddling 的帮助下编写了这个函数: uint16_t *decode(uint64_t instr) { // decode instr (thi
我正在从微 Controller 读取两个寄存器。一个具有 4 位 MSB(前 4 位有一些其他内容),另一个具有 8 位 LSB。我想将其转换为一个 12 位 uint(准确地说是 16 位)。到目
要演示的示例代码: public int FindComplement(int num) { //uint mask = ~0; //<-- error CS0031 //
$ rustc --test mapAsMapKey.rs mapAsMapKey.rs:18:43: 18:52 error: mismatched types: expected `fn@(&&@
一般问题:我有一个很大的二维点空间,里面稀疏地分布着点。把它想象成一 block 撒满黑点的白色大 Canvas 。我必须多次迭代和搜索这些点。 Canvas (点空间)可能很大,接近极限int 的值
假设我们只是调用一个普通数字,数字会启动什么。 uint256 plainNumber 我明白它是零。但是我要问的是,有没有办法检测该数字是由编译器还是用户变量设置的。例如... uint256 pl
我试图在 leetcode.com ( https://leetcode.com/problems/number-of-1-bits/ ) 上解决一个简单的问题,我遇到了一个奇怪的行为,这可能是我缺乏
uint number = 0x418 in bits : 0000010000011000 uint number1 = 0x8041 in bits: 1000000001000001 uint
我如何在 C# 中生成具有某个最大值的伪随机 uint? (不需要最低限度。)似乎有很多问题要求完全随机,但没有上限。 澄清:此上限可能大于 int.MaxValue,因此仅强制转换 Random.N
我已经用私有(private)数据成员围绕 ulong 编写了一个简单的包装器。我希望能够将包装器转换为 ulong 以检索数据。我希望强制转换为 uint 并丢失数据是非法的,因此我没有编写对 ui
哪些是“Uint”变量?就是有“Uint8”、“Uint16”等…… 但是它们是什么? 现在我有一些时间使用 C++,但我从来不需要使用这些变量并引起我的好奇。 提前致谢。 最佳答案 uint 不是标
我有一个 native 方法,它需要一个指针来写出一个双字(uint)。 现在我需要从 (Int) 指针中获取实际的 uint 值,但是 Marshal 类只有方便的方法来读取(有符号)整数。 如何从
我是一名优秀的程序员,十分优秀!