- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
给定foo.cpp
:
#include <atomic>
namespace {
std::atomic<int*> gets_zero_init;
std::atomic<int*> gets_nullptr{nullptr};
}
我相信 gets_zero_init
是零初始化的,并且在零初始化之后它的初始化完成。我也有信心 gets_nullptr
最终将用 nullptr
初始化,我也相当有信心 gets_nullptr
零初始化后的初始化未完成,因为 std::is_trivially_constructible<decltype(gets_nullptr), int*>::value
是false
(至少,它在我的编译器上)。然而,我有点不清楚是否 gets_nullptr
在常量初始化、静态初始化或动态初始化之后被完全初始化。是哪个?
此外,为了争论起见,我有兴趣确保感兴趣的对象在零初始化后完全初始化并且不需要任何进一步的初始化,所以我使用 gets_zero_init
方法。 gets_zero_init
中嵌入的指针由于零初始化,将保持全零位模式。
是否保证全零位模式等同于nullptr
?换句话说,如果我想要 gets_nullptr
的语义,我可以依赖 gets_zero_init
的零初始化吗?提供那个?
最佳答案
我想我已经弄清楚了。
首先,我的帖子有错误。我没有意识到零初始化和常量初始化只是静态初始化的不同形式。你得到一个或另一个,而不是一个然后另一个。所以,请忽略这一点误会。
我相信,gets_zero_init
和 gets_nullptr
都进行了静态初始化。第一个获得零初始化,有点明显。第二个获得常量初始化,因为:
gets_nullptr
的构造函数的参数是常量表达式换句话说,gets_zero_init
和 gets_nullptr
都有静态初始化,因此后者是更好的选择,因为它不依赖于假设所有-零位模式等同于 nullptr。
关于c++ - 零初始化的 std::atomic<T*> 是否保证等同于用 nullptr 初始化的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38677919/
判断这2个相似的Uris实际上相同的标准方法是什么? var a = new Uri("http://sample.com/sample/"); var b = new Uri("http://sam
这个问题在这里已经有了答案: Why does "true" == true show false in JavaScript? (5 个答案) 关闭 5 年前。 可能我很困惑,但我无法理解这个愚蠢
我是一名优秀的程序员,十分优秀!