C++的一些隨筆(第一篇)
C++中 ->的作用
C++中 :: 的作用
呼叫變數
作用域::變數
如果a的作用域為全域性作用域,呼叫a時用
::a
如果a的作用域為類ww時,呼叫a時用
class ww
{
public:
int a();
}
int ww::a()//表示a是屬於ww的
{
return 0;
}
關於va_list, va_start, va_arg, va_end
由於在C語言中沒有函式過載,解決不定數目函式引數問題變得比較麻煩,即使採用C++,如果引數個數不能確定,也很難採用函式過載。對這種情況,提出了指標引數來解決問題。
如printf()函式,其原型為: int printf( const char* format, ...)
它除了有一個引數format固定以外,後面跟的引數的個數和型別是可變的,例如我們可以有以下不同的呼叫方法: printf( "%d ",i); printf( "%s ",s); printf( "the number is %d ,string is:%s ", i, s);
如何實現其功能?
我們需要以下幾個巨集定義:
(1)va_list 定義了一個指標arg_ptr, 用於指示可選的引數.
(2)va_start(arg_ptr, argN) 使 引數列表指標arg_ptr指向函式引數列表中的第一個可選引數,argN是位於第一個可選引數之前的固定引數, 或者說最後一個固定引數.如有一va函式的宣告是void va_test(char a, char b, char c, ...), 則它的固定引數依次是a,b,c, 最後一個固定引數argN為c, 因此就是va_start(arg_ptr, c).
(3)va_arg(arg_ptr, type) 返回引數列表中指標arg_ptr所指的引數, 返回型別為type. 並使指標arg_ptr指向引數列表中下一個引數.返回的是可選引數, 不包括固定引數.
(4)va_end(arg_ptr) 清空引數列表, 並置引數指標arg_ptr無效.
(注:va在這裡是variable-argument(可變引數)的意思. 這些巨集定義在stdarg.h中,所以用到可變引數的程式應該包含這個標頭檔案)