临时结构对象构造函数奇数调用



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

最新更新