gpt4 book ai didi

c++ - 带有模板的奇怪解析行为 _Atomic

转载 作者:行者123 更新时间:2023-11-30 14:32:42 25 4
gpt4 key购买 nike

//clang 3.8.0

#include <iostream>

template<typename T>
_Atomic T* get_atomic(T* val) {
return reinterpret_cast<_Atomic T*>(val);
}

int main()
{

volatile int val = 1;
_Atomic volatile int* val_ptr = reinterpret_cast<_Atomic volatile int*>(&val);
// works as expected
std::cout << *val_ptr;
// Fails due to "_Atomic cannot be applied to qualified type 'volatile int'"
//std::cout << "Hello, world!\n" << *get_atomic(&val);
}

为什么模板扩展的解析方式和显式扩展的解析方式存在差异?它们应该是相同的。有没有办法确保 _Atomic 在存在模板参数的情况下被视为限定符?

最佳答案

关键字_Atomic来自C (C11),不是C++中的关键字。在 C++ 中,原子是通过 std::atomic 指定的。最好不要混合两种语言的语法概念。

如果您必须混合使用两种语言访问原子数据的代码,则应该处理原子类型,例如 std::atomic_int,或者发明一些类似于以下的宏接口(interface)

#ifdef __cplusplus
#define myAtomic(T) std::atomic< T >
#else
#define myAtomic(T) _Atomic(T)
#endif

在任何合理的平台上,这些都应该是二进制兼容的。

关于c++ - 带有模板的奇怪解析行为 _Atomic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59705099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com