我不明白这段代码应该在 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 类型,它不同)。