zoukankan      html  css  js  c++  java
  • run 在main前

    #include <iostream>
    #include <vector>
    using namespace  std;
    
    class RunBeforeMain{
    public:
        static int hello() {
            cout<< "Hello world" <<endl;
            vector<int> nums(5,9);
            for(auto i : nums) {
                cout<<i<<endl;
            }
            return 0;
        }
    };
    
    int main() {
        cout << "Bye, World!" << endl;
        return 0;
    }
    
    //即使globalVar在main后定义,也会在main执行前被初始化
    int globalVar = RunBeforeMain::hello();
    
    //在全局中直接调用类的静态成函数会产生重复声明错误。
    //RunBeforeMain::hello();//Declared In: main.cpp
    

    vs2019, gcc10.2输出:

    Hello world
    9
    9
    9
    9
    9
    Bye, World!
    

    CLion2020输出:

    Bye, World!
    

    总结:

    在程序入口(例如main)被调用前,全局变量会被初始化,还会有函数的定义,函数的声明。
    
    上面直接调用类的静态成员函数被当做了声明,导致错误。
    
    为什么会被当做了函数声明,而不是函数调用?
    
    因为如果在这里就可以进行函数调用,那么程序究竟有几个入口?总体的结构会混乱。
    
    为什么间接调用可以?
    
    因为初始化全局变量的时候会进行求值,函数调用。但这种函数调用通常不会使得程序的总体结构混乱。
    
    所以在main前,也可以执行你的代码!
    
  • 相关阅读:
    Eclipse中的常见设置
    Maven配置及使用总结
    启动Eclipse时,出现 “Failed to load the JNI shared library "C:Program Filesjavajdk1.7.....jvm.dll"
    Java 环境问题汇总
    Java 异常处理
    Java面向对象(二)
    Java面向对象(一)
    Java获取路径
    Java代码读取文件
    工作常用快捷键大全
  • 原文地址:https://www.cnblogs.com/Searchor/p/14007224.html
Copyright © 2011-2022 走看看