草庐IT

volatile-qualifier

全部标签

c++ - Clang 与 GCC : Friend-ing a global function via qualified/unqualified names

我正在尝试确定是否针对Clang、GCC或两者提交错误报告(我已经针对Clang主干和GCC4.7.2进行了测试:如果有人可以针对GCC主干验证这一点会有所帮助):基本上,在默认和C++11模式下,使用-fsyntax-only可以很好地编译以下代码三行文件:classA{friendvoidf();};请注意,没有事先声明f(),但这显然没问题。但是,Clang(但不是GCC)拒绝以下内容:classA{friendvoid::f();};来自Clang的错误是“在指定范围内找不到类型为'void()'的名为'f'的函数”,但我在标准中找不到任何理由来区别对待这种情况,所以我认为这是

c++ - 为什么 ostream 为定义为 `1` 的字符串打印 `volatile char[]` ?

这个问题在这里已经有了答案:Whydoesstd::coutconvertvolatilepointerstobool?(4个回答)关闭8年前。考虑这个(人工)示例:#include#includeintmain(){volatilechartest[]="abc";std::printf("%s\n",test);std::cout使用GCC编译并运行会得到以下输出:$g++test.cc$./a.outabc1如您所见,printf正确打印字符串,而cout打印1。为什么在这种情况下写入cout会产生1? 最佳答案 operat

C++:std::atomic<bool> 和 volatile bool

我正在阅读AnthonyWilliams的C++concurrencyinactionbook。这个经典的例子有两个线程,一个产生数据,另一个消耗数据,A.W.这段代码写得很清楚:std::vectordata;std::atomicdata_ready(false);voidreader_thread(){while(!data_ready.load()){std::this_thread::sleep(std::milliseconds(1));}std::cout而且我真的不明白为什么这段代码与我使用经典的volatilebool而不是原子的不同。如果有人能在这个问题上打开我的思

c++ - 智能感知 : the object has type qualifiers that are not compatible with the member function

我有一个名为Person的类:classPerson{stringname;longscore;public:Person(stringname="",longscore=0);voidsetName(stringname);voidsetScore(longscore);stringgetName();longgetScore();};在另一个类(class),我有这个方法:voidprint()const{for(inti=0;i这是人的声明:staticconstintsize=8;Personpeople[size];当我尝试编译它时,我得到了这个错误:IntelliSense

c++ - std::is_trivially_copyable - 为什么 volatile 标量类型不能轻易复制?

C++17的当前标准(我观察到C++11的类似措辞)对于可复制的类型的措辞非常困惑。我首先通过以下代码(GCC5.3.0)偶然发现了这个问题:classTrivialClass{};std::is_trivially_copyable::value;//0std::is_trivially_copyable::value;//1??让困惑变得更糟,我试图查看std::is_trivial对此事的看法,但结果更加困惑。classTrivialClass{};std::is_trivial::value;//1??std::is_trivial::value;//1很困惑,我检查了最新的C

C++ - volatile应用于方法时代表什么?

如果我有如下C++方法声明:classA{public:doublegetPrice()volatile;};volatile在这里代表什么?它可以用来做什么?您可能对this感兴趣AndreiAlexandrescu的Dobbs博士文章。我是:)编辑:那篇文章是不久前写的,现在看来社区已经继续前进了。HerbSutter有话要说this.谢谢伊恩(和赫伯!)mlimber指出Andrei有一篇后续文章here他继续提倡使用volatile正确性作为检测支持类似POSIX互斥体的系统上的竞争条件的宝贵工具。 最佳答案 您可能熟悉co

c++ - 为什么这个 volatile 变量的地址总是为 1?

我想检查我的变量的地址volatileintclock;cout但它总是说x在地址1。我做错了什么吗?? 最佳答案 iostreams会将大多数指针转换为void*以供显示-但volatile指针不存在转换。因此,C++回退到对bool的隐式强制转换。如果要打印地址,请显式转换为void*:std::cout 关于c++-为什么这个volatile变量的地址总是为1?,我们在StackOverflow上找到一个类似的问题: https://stackoverf

c++ - c++中void* volatile*是什么意思

我正在查看以下代码:inlinevoid*interlocked_read_acquire(void*volatile*x);我想知道为什么不只是一个volatilevoid*作为参数。一般而言,volatile*的语义或定义是什么?我还假设您可以将volatile*限定符与除void之外的任何其他类型一起使用。对吗? 最佳答案 使用cdecl或clockwisespiralrule破译C风格的声明:void*volatile*x将x声明为指向void的volatile指针不同于:volatilevoid*x将x声明为指向volat

c++ - C:C 中的 volatile 数组

volatile关键字在C中用于防止编译器对变量执行某些优化,以及其他细微的更改。例如;volatileintmy_int=0;创建一个整数。在某些情况下,它可能会阻止以下优化:while(my_int==0);//Loopuntilmy_int!=0优化到:while(1);//Loopinfinity.这对于包括嵌入式系统中经常遇到的情况很有用,例如可能通过中断函数调用对变量进行修改的情况。还有许多其他例子说明这种技术是有用的。my_int可以是一个被这样的函数修改的标志。(这只是一个玩具模型。)但是,考虑函数修改的数据是数组的情况。数据可以由指针指向。unsignedchar*m

c++ - 为什么 'volatile' 寄生在 C++ 中?

考虑以下代码:intmain(){inti;volatileint*p=&i;int*v=p;return0;}这会在g++中产生错误:$g++-ovolatilevolatile.cppvolatile.cpp:Infunction‘intmain()’:volatile.cpp:6:error:invalidconversionfrom‘volatileint*’to‘int*’我的意图是让p易变。但是,一旦我读取了p的值,我就不关心访问v是否是volatile的。为什么需要将v声明为volatile?这当然是假设的代码。在实际情况中,您可以想象p指向一个内存位置,但在外部进行了修