volatile的用法
看网上的一些介绍,基本上都是以整型举例。
如果是char数组或string型的呢,该如何用?
void main()
{
char volatile Test[100] = "are you ok? ";
// 'volatile char * ' : forcing value to bool 'true ' or 'false ' (performance warning) 通过(char*)Test强制转换一下没问题,但不知不加为什么?
cout < < Test < < endl;
// 同样在赋值时也需要转换,不然下面的strcpy也同样报错
strcpy( Test, "how are you? " );
}
如果是string或CString类型呢?
volatile string sBuffer = " ";
// error C2678: binary '= ' : no operator defined which takes a left-hand operand of type 'volatile class std::basic_string <char,struct std::char_traits <char> ,class std::allocator <char> > '
谢谢!!
sBuffer = "good ";
[解决办法]
进一步讨论:
#include <iostream>
using namespace std;
void main()
{
volatile char Test[100] = "are you ok? ";
// 输出结果为1,自动转换为bool类型了,呵呵
cout < <Test < < endl;
}
[解决办法]
“全局变量耦合”?这可不是一个好的设计啊。让接收线程把收到的东西转发消息到主线程吧。
[解决办法]
volatile表示“易变的”,也就是说,我们的程序没有去写这个变量,这个变量的值也会改变。用volatile修饰过的变量,编译器每次都会去读取该变量,而不会去访问该变量的buffer。一般来说,volatile是用来修饰寄存器的。在Windows平台下,声明一些多线程共享的变量也会用到volatile。但是共享内存区域是一个不好的编程风格。因此volatile很少在非嵌入式程序中出现。