C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 使用clang对std :: atomic函数进行不明确的调用大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图用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,根据我的理解,他打算保护它,以便在打算调用它时不会被@L_262_12@.

编辑:
我使用clang3.6(clang3.7上的相同错误)和g和std :: atomic 4.8.

解决方法

如果问题是“如何在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;,但这不太可读和明显.

大佬总结

以上是大佬教程为你收集整理的c – 使用clang对std :: atomic函数进行不明确的调用全部内容,希望文章能够帮你解决c – 使用clang对std :: atomic函数进行不明确的调用所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。