我不明白这段代码应该在 C 和 C++ 中提供不同的行为(在 C 和 C++ 中有效的代码在用每种语言编译时是否会产生不同的行为?)
#include <stdio.h>
struct f { };
int main() {
f();
}
int f() {
return printf("hello");
}
为什么我可以在C++中调用f()?它是默认构造函数吗(顺便说一句,我没有看到,是否还有另一个“隐式”构造函数?)?在 C++ 中,这不是调用 f() 函数..
每个类都有一个隐式的默认构造函数,除非您定义了其他构造函数。类的定义
f
:
struct f { };
相当于:
struct f {
f() = default;
// same for copy constructors, move constructors, destructor, etc
};
所以,是的,在 main 内部,你正在初始化值(或默认初始化,这里是一样的),一个
f
类型的对象。
至于为什么它不调用函数
f
,那么,在main
内部,没有可用的函数f
的声明或定义。名为 f
的唯一可见符号是上面定义的结构体。
在 C++ 中,表达式
T()
(其中 T
是类型)是创建值初始化的临时值。请注意,这与一般情况下对构造函数的调用不同(特别是对于 POD 类型而言不同)。