代码之家  ›  专栏  ›  技术社区  ›  Galaxy

C++在全局范围内是否有代码?

  •  5
  • Galaxy  · 技术社区  · 6 年前

    Ch programming language (C/C++)的解释器,不能在C++程序的全局范围内拥有代码。代码/指令只能在函数体[期间]内!

    但是,我发现,C++中的主函数之前,可以将函数赋值给全局变量!这将涉及 call 汇编代码中的指令。也可以将两个变量的和赋给程序集代码外的另一个全局变量。几乎可以肯定的是 add mov + 如果类类型的重载运算符中包含print语句,则该运算符何时执行?

    这个问题是对我之前发布的一个问题的回应: Why can't I assign values to global variables outside a function in C?

    int foo() {
        cout << "Inside foo()" << endl;
        return 5;
    }
    
    // is this not code?
    int global_variable = foo();
    
    // How does this statement work without generating code?
    int a = 4;
    int b = 5;
    int c = a + b;
    
    int main() {
        // The program behaves as if the statements above were executed from
        // top to bottom before entering the main() function.
        cout << "Inside main()" << endl;
        cout << "int c = " << c << endl;
        return 0;
    }
    
    1 回复  |  直到 6 年前
        1
  •  19
  •   Nicol Bolas    5 年前

    关于你链接到的问题的答案是用简单的方式进行,而不是使用严格的C++命名结构。

    if , for ,表达式等。

    只有声明和定义才能出现在全局范围内。当然,定义可以 包括 表达。 int a = 5; 定义由表达式初始化的全局变量。

    但是不能在全局范围内使用随机语句/表达式,比如 a = 5;

    您可以在之前调用函数 main 当然。全局变量构造函数和初始值设定项过于复杂,无法在编译时执行,必须在 主要的 . 例如:

    int b = []()
    {
        std::cout << "Enter a number.\n";
        int temp;
        std::cin >> temp;
        return temp;
    }();
    

    编译器在编译时不能这样做;它是交互式的。C++要求所有全局变量都在初始化之前初始化。 主要的 主要的 . 这是完全合法的。

    每个C++编译执行系统都有一些调用代码的机制。 之后 主要的 . 全局变量必须初始化,并且可能需要调用对象构造函数来进行初始化。之后 主要的