首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与空指针比较时,C++11 std::compare_exchange_strong不编译。

与空指针比较时,C++11 std::compare_exchange_strong不编译。
EN

Stack Overflow用户
提问于 2013-11-22 14:00:29
回答 1查看 2.7K关注 0票数 1

我正在一个并行的avl树上工作,遇到了一个问题。以下是导致此问题的函数:

代码语言:javascript
复制
template<typename T, int Threads>
bool PTreeSet<T, Threads>::tryInsert(Node* parent, Node* node) {
    if (parent->key > node->key) {
        return parent->left.compare_exchange_strong(nullptr, node); // <-- Error
    } else if (parent->key < node->key) {
        return parent->right.compare_exchange_strong(nullptr, node); // <-- Error
    } else {
        return false;
    }
    return true;
}

parent->leftatomic<Node*>类型,如果当前值为null,我希望将指针设置为node。编译器抱怨错误。

代码语言:javascript
复制
error: no matching member function for call to 'compare_exchange_strong'
        return parent->left.compare_exchange_strong(nullptr, node);

为什么这是无效代码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-22 14:06:49

atomic<T>::compare_exhange_strong的第一个参数是T&。它需要一个值。这是“exchange”的一半:原子的当前值被加载到第一个参数所引用的对象中。

你需要这样的东西:

代码语言:javascript
复制
Node* tmp = nullptr;
parent->left.compare_exchange_strong(tmp, node);

副作用是,如果parent->left实际上不是NULL,则在tmp中得到它的当前值(当然,如果您不需要它,可以忽略它)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20146682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档