纷纷雪下错杂谈

生活就像一杯淡淡的清茶,初品之时是那么平淡无味又有几丝苦涩。而回味之时,留下的便尽是一韵久长的幽香。于是,我更热爱生活了。

const 与 volatile在语法上是相同的。但语义是不一样。它们一对有趣的东东。

例子1: 关于指针
char* a = “hello world!”;
const char* b = a;
char* const c = a;

a = b;  //error! or warning 较为严格的编译器应该是错误.
a = c;

volatile char* d = a;
char* volatile e = a;

a = d;  //error! or warning 较为严格的编译器应该是错误.
a = e;

例子2: 关于被typedef的指针类型
typedef char* char_pointer_type;

char_pointer_type a = “hello world!”;
const char_pointer_type b = a;
char_pointer_type const c = a;

a = b;
a = c;

volatile char_pointer_type d = a;
char_pointer_type volatile e = a;

a = d;
a = e;

通过,可见被typedef类型被视为一个整体。关键字置前置后无所谓,都表示是此类型的常量(对const来说)。volatile不知该称怎么称呼它。

例3:关键字对方法的作用
class object
{
public:
  void doing()
  {
    cout << “doing usually.“ << endl;
  }

  void doing() const
  {
    cout << “const object doing.“ << endl;
  }

  void doing() volatile
  {
    cout << “volatile object doing“ << endl;
  }

  //不晓得volatile和const混合起来怎么写,语义上好像不存在.  
};

void main()
{
  object * po = new object;
  const object* pco = po;
  volatile object* pvo = po;

  po->doing();
  pco->doing();
  pvo->doing();
}

//可以尝试一下用例1,例2中的指代方法来调用doing方法。看看效果。

posted on 2004-06-02 14:57  释雪  阅读(572)  评论(0)    收藏  举报

导航