奇怪的c++语法:函数调用之前的类型定义

Weird C++ syntax: type definition before a function call

本文关键字:类型 函数调用 定义 c++ 语法      更新时间:2023-10-16

我正在阅读NodeJS和V8源代码,特别是node_contextify.cc文件,我无法理解以下行:

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_contextify。Cc(第268行突出显示)。

虽然我知道这是一个关于语法的基本问题,但我甚至不知道如何调用它,所以我无法在Google, StackOverflow或c++参考中找到任何结果。

问题标题是我搜索时的一个尝试。

使用debug_context初始化context_scope变量。Context::Scope是类型(这里有一个参考页http://bespin.cz/~ondras/html/classv8_1_1Context_1_1Scope.html)

这是另一篇关于如何正确使用Context::Scope的文章

顺便说一句,即使你不知道该怎么称呼它,搜索"v8 Context::Scope"也会出现相关信息。

Context::Scope context_scope(debug_context);

你正在声明一个Context::Scope类型的对象context_scope,并用debug_context初始化它
Context::Scope可以是在类或结构中定义的类型,例如:

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

或者Context::Scope可以是名称空间内定义的类型,例如:

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