2016-11-18 52 views
1

我讀的NodeJS和V8源,格外node_contextify.cc文件,我無法理解下面一行:奇怪的C++語法:函數調用之前類型定義

Context::Scope context_scope(debug_context); 

我不明白那是什麼Context::Scope之前似乎是一個函數調用。我不認爲這是一個聲明,因爲它是一個功能代碼,連同一個if和其他調用。

完成相關代碼:

... 
    if (debug_context.IsEmpty()) { 
     // [... lines removed for brevity ...] 
    } 
    Context::Scope context_scope(debug_context); 
    MaybeLocal<Script> script = Script::Compile(debug_context, script_source); 
    if (script.IsEmpty()) 
     return; // Exception pending. 
    args.GetReturnValue().Set(script.ToLocalChecked()->Run()); 
} 
... 

那是什麼Context::Scope的含義是什麼?


進一步的信息:

文件:node/node_contextify.cc(線268被突出顯示)。

雖然我知道這是一個關於語法的基本問題,我甚至不知道如何調用它,所以我無法在Google,StackOverflow或C++參考中找到任何結果。

問題標題是我在搜索時的一個嘗試。

+0

它是命名空間。範圍是在名稱空間上下文中定義的類型。有關更多信息,請參見http://en.cppreference.com/w/cpp/language/namespace。 –

+0

您正在尋找['範圍解析運算符](https://msdn.microsoft.com/en-us/library/b451xz31.aspx)。 –

+0

謝謝你,肯和王!我知道命名空間,但不涉及這種初始化。 @jdigital已經回答了=) –

回答

3

它使用debug_context初始化context_scope變量。背景::範圍是該類型(這裏有一個參考頁http://bespin.cz/~ondras/html/classv8_1_1Context_1_1Scope.html

下面是如何使用上下文::範圍How to correctly use Context::Scope ?

順便說一句,即使你不知道怎樣稱呼它的另一篇文章,搜索「V8上下文::範圍「將打開信息。

+0

謝謝!在你的幫助下,我發現了很多關於它的事情=)。我不知道如何添加相關的問題,但我認爲有關語法的部分與[此StackOverflow問題]類似(http://stackoverflow.com/questions/1764831/c-object-without-new)。 –

+0

是的,代碼正在初始化堆棧上的一個對象。 – jdigital

2
Context::Scope context_scope(debug_context); 

您與debug_context
Context::Scope聲明Context::Scope類型的對象context_scope和初始化它可能是在一個類或結構中定義的類型,例如:

class Context { 
public: 
    using Scope = int; 
    .... 
} 

,或者Context::Scope可以是在名稱空間內定義的類型,例如:

namespace Context { 
    using Scope = int; 
    ... 
} 
+0

也謝謝!但是,接受的答案更適合我提供的附加信息。無論如何,我爲你點擊了+1,但是我的排名很低,並且+1未公開顯示=/ –

+0

瞭解,我很感謝你的迴應:) – LWimsey