在C++中 - 是否可以将volatile shared_ptr与nullptr进行比较?

Dra*_*neg 6 c++ volatile shared-ptr

似乎实现中的volatile比较函数shared_ptr不存在.

存在甚至有意义吗?

Nia*_*all 5

基本上没有,标准不配合的比较布尔转换volatile shared_ptr

下面无法编译...

auto main() -> int {
    volatile shared_ptr<int> a;
    if (a == nullptr) // fails
        ; // empty
    if (a) // fails
        ; // empty
}
Run Code Online (Sandbox Code Playgroud)

您可以volatile取消 (via. a const_cast),但我不确定这会产生预期的结果。从cppreference

const通过非const访问路径修改对象并volatile通过非volatile泛左值引用对象会导致未定义的行为。

更笼统地说,在不将成员方法标记为 时volatile,类或库实现者实际上是在说“这不打算用作volatile对象” - 如果是,那么适当的方法或重载将为volatile对象提供。同样,这适用于const,在将成员标记为 时const,他们说“这个类可以用作const对象。

为什么volatile需要,哪些外部来源可以修改shared_ptr“在编译器不知情的情况下”(这是 的用途之一volatile)?如果存在线程问题,那么您最好使用一个线程库实用程序,或者如果要求只是关闭优化,则各种编译器已经为此提供了机制(pragma 等)。