为什么 C# 有静态主 () 但C++没有静态主
Why C# has static Main () but C++ has no static main
出于好奇,C# 需要一个静态 Main(),一些模块(可能来自操作系统)调用 Main 而不创建对象,但为什么这对C++来说不是真的?当然,在C++中,main 不属于任何类。如何从我的应用程序外部以 2 种不同的方式调用它们?
为什么 C# 没有像 C++ 年那样具有 main,是不是为了让 C# 刚刚引入(仅用于命名约定)它作为方法应该以大写字母开头或某些或其他原因?
就Main
与main
而言,情况很简单:Microsoft决定Main
遵守自己的大写命名约定。
不过,static
与非static
的情况需要更多的背景知识:C++具有 C# 所没有的东西 - 即独立函数(即不是任何类成员的函数)。将 static
关键字应用于C++函数时,其含义会根据函数是类的成员还是独立的成员而变化。
在 C++ 中将static
应用于成员函数时,其含义与 C# 中相同,即该函数成为类函数,而不是实例函数。
当您将static
应用于独立的非成员函数时,含义会发生变化:C++编译器使函数从给定翻译单元外部不可见。除此之外,这使得该函数对处理启动并将控制权传递给main
函数的运行时库C++部分不可见。
由于C++标准指定入口点是通过非成员函数,因此将static
应用于main
会将其隐藏在C++运行时中,使其无法用作入口点。请参阅此问答,了解有关将main
设为静态会发生什么的更多信息。
其实原因很简单,不用看得很远就能知道这个原因。C++向下兼容 C(或多或少)。C有一个主要功能,按照惯例,它是应用程序的起点。通过对 C 代码进行微小的更改,您可以使用 C++ 编译器编译 C 代码。
但是,C# 没有此限制,因此可以通过将静态 main 定义为任意类的成员来定义应用程序的不同入口点。因为 C# 没有独立的函数,只有实例方法和静态方法。
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- #为""定义宏;静态";针对不同的上下文
- cmake如何在fedora工作站中找到boost静态库包
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- cmake在我的项目中所需的所有静态库都不成功
- C++从另一个类访问公共静态向量的正确方法是什么
- 基于boost的程序的静态链接——zlib问题
- 在静态库中嵌入类方法
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 如何在C++中获得"静态纯虚拟"功能?
- 私有类型的静态常量成员
- 使用gcc从静态链接的文件中查找可选符号
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 如何在C++中使用非静态成员函数作为回调函数
- 将静态库链接到不带-fPIC的共享库中
- 静态结构和一个定义规则
- 为什么虚函数不能是静态的和全局的?
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身