c – 使用clang对std :: atomic函数进行不明确的调用
发布时间:2020-12-16 07:15:14 所属栏目:百科 来源:网络整理
导读:我试图用clang编译我的代码,我之前使用的是g. 我收到错误编译以下代码: #include atomictypedef void (*my_func) ();int main(int argc,char** argv){ std::atomicmy_func _func; _func(); return 0;} 错误是: a.cpp:23:3: error: call to object of type
我试图用clang编译我的代码,我之前使用的是g.
我收到错误编译以下代码: #include <atomic> typedef void (*my_func) (); int main(int argc,char** argv) { std::atomic<my_func> _func; _func(); return 0; } 错误是: a.cpp:23:3: error: call to object of type 'std::atomic<my_func>' is ambiguous _func(); ^~~~~ /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/atomic:304:7: note: conversion candidate of type 'void (*)()' operator __pointer_type() const noexcept ^ /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/atomic:307:7: note: conversion candidate of type 'void (*)()' operator __pointer_type() const volatile noexcept ^ 1 error generated. 这不是我的代码,它是我需要保留的遗留代码.在真正的代码中,_func是一个类成员,并且有一个setter和一个getter,根据我的理解,他打算保护它,以便在打算调用它时不会被修改. 编辑: 解决方法
如果问题是“如何在CLang上编译代码”,答案很简单:
#include <atomic> typedef void (*my_func) (int ); int main() { std::atomic<my_func> _func; (*_func)(42); return 0; } 在原子类型上没有定义operator(),因此编译器必须执行类型转换 – 并且有两个选项.另一个修复是使_func volatile:volatile std :: atomic< my_func> _func;,但这不太可读和明显. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |