2011-11-07 11 views

答えて

0

「字句定数」という用語を使用することは、異なる種類の定数を意味するものではありません。

一般的に、C++文法について語るときは、字句これという字句を使用します。オブジェクトに定数が格納されているのとは対照的に、ファイルのスコープやマトリックス上の演算子です。

だから私は定数等を有しているコードの行、について話している場合:(32786) 私は数だけC++トークンとして存在することを意味を確認するために(多分不必要)字句の単語を使用することができます。

私がC++ tokensとその関係について話しているとき、私はwikipedia doesのような語彙を使用しています。

7

"字句"は、ソースコードに関連していることを意味します。

たとえば、1は字句定数です。 OTOH、sizeof(char)もコンパイル時の整数定数式ですが、字句定数ではありません。語彙的には、それはsizeof演算子の呼び出しです。

レキシカル演算子はソースコード上で動作します。プリプロセッサ演算子はこのカテゴリに分類されます。

ほとんどの場合、自分のプログラムのどこにでも1またはsizeof(char)を使用しても差はありません。

#define STR(x) #x 

std::string one = STR(1); 
std::string also_one = STR(sizeof(char)); 

最後に、レキシカルスコープは、プログラムソースの一部を意味します。実際のコードではなく、評価の結果にこれらの作業はので、しかし、字句演算子#または##の引数としては、かなりの違いが識別子が存在するコードが存在する(認識され、使用可能)。これは、オブジェクトの存続期間(オブジェクトの存続期間ともいう)とは対照的です。これは、オブジェクトが存在する(その値を保持し、ポインタ名または参照を介して間接的に操作される可能性がある、名前がレキシカルスコープではないにもかかわらず) 。

string f(string x) { return "2" + x; } // main's "y" is not in lexical scope, however it is in dynamic scope, and will not be destroyed yet 

int main(void) 
{ 
    string y = "5.2"; // y enters lexical scope and dynamic scope 

    string z = f("y"); // y leaves lexical scope as f is called, and comes back into lexical scope when f returns 

    return z.size(); 
    // z leaves lexical and dynamic scope, destructor is called 
} 
関連する問題