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