C ++のスコープ

スコープ

スコープは、身体のプログラム領域における有効な識別子であります

1.関数プロトタイプスコープ

函数作用域是C++程序中最小的作用域,在函数原型声明时参数的作用范围就是函数原型的作用域

2.ローカルスコープ

函数体内声明的变量,其作用域从声明处开始,一直到声明所在的块结束的大括号为止,局部变量的作用范围便是局部作用域。

3.クラススコープ

类可以被看做是一组有名成员的集合,类的成员m具有类作用域,对m的访问有三种:

(1)ローカルスコープ識別子Xにおいて同じ名前のメンバ関数には文が存在しない場合、ダイレクトアクセス部材は、mは、関数。換言すれば、このような関数mが機能しています。
(2)や式でXM X :: M。これは、プログラムのオブジェクトのメンバにアクセスするための最も基本的な方法です。
(3)ptr-で>そのような表現はptrがクラスオブジェクトxへのポインタをポイントするようにあり、m。

4.名前空間スコープ

一个大型的程序通常)模块构成 .不同的模块甚至有可能 是由不同人员开 发的。不同模块 中的类和丽数可能发生重名。这样就会引发错误。 这就好像上海和武汉都有南京路,如果在缺乏k的情况下直接说出“南京路”,就会产生歧义。但如果说“上海的南京路”或武汉的”,歧义就会消除。命名空间起到的就是这样的作用。命名空间的语法形式如下:
    namespace 命名空间名
{
    命名空间内的各种声明(函数声明、类声明、......)
}

空間内の名前空間宣言を識別するためのドメイン名は、次の構文を使用し、ドメイン名空間に属しているが、識別子に他のスペースを使用したい:
名前空間識別子名の名前を::

スコープの例:

    #include <iostream>
    using namespace std;
    int i;//在全局命名空间中的全局变位
    namespace Ns 
    {
        int j;//在N命名空间中的全局变量
    }
    int main()
    {
    i=5; //为全局变量 i 赋值
    Ns::j=6;//为全局变量 j 赋值
    {
        using namespace Ns;//使得在当前块中可以直接引用Ns命名空间的标识符
        int i;//局部变量,局部作用域
        i=7;
        cout<<"i="<<i<<endl; //输出 7
        cout<<"j="<<j<<endl; //输出6
    }
       cout<<"i="<< i<< endl;//输出5
        return 0;
    }

結果を実行します。

この例では、私は、名前空間の都市効果を持つ変数は、それが終了するまで、ファイルの最後にグローバル名前空間、その有効範囲に属します。同じ初期値の範囲5のサブブロック1において次に、同じ変数が宣言され、初期値7を有する名前空間変数にメイン関数の先頭に。最初の結果は、Iとローカル変数のスコープ変数iが変数i名前空間の範囲を有する、スコープを非表示に名前空間からである出力7であり、以下に説明されている(見えなくなります可視性の問題)。プログラムは、ブロック1の端部に実行されると、第2の出力は、出力は、iが5と同じスコープの名前空間値を有する変数です。変数jは、それがNsとによって名前空間Nsとで宣言され、名前空間の範囲を有する:: main関数内の参照のjは、それを割り当て、ブロック1に、そのような名前空間Ns個の名前空間を使用していること識別子はそのまま出力J jの可能な識別子を使用して、そのブロック内で直接参照することができます。

おすすめ

転載: www.cnblogs.com/yygxy/p/11592831.html