1

我不明白这段代码应该在 C 和 C++ 中提供不同的行为(在 C 和 C++中有效的代码在用每种语言编译时会产生不同的行为吗?

#include <stdio.h>

struct f { };

int main() {
    f();
}

int f() {
    return printf("hello");
}

为什么我可以在 C++ 中调用 f()?它是默认构造函数(顺便说一句,我没有看到,还有另一个“隐式”吗?)?在不调用 f() 函数的 C++ 中..

4

2 回答 2

2

每个类都有一个隐式的默认构造函数,除非你定义了其他构造函数。这个类的定义f

struct f { };

相当于:

struct f { 
    f() = default;
    // same for copy constructors, move constructors, destructor, etc
};

所以是的,在 main 内部,你正在初始化值(或默认初始化,这里是一样的),一个类型为 的对象f

至于为什么它不调用函数f,好吧,里面main没有f可用的函数的声明或定义。命名的唯一可见符号f是上面定义的结构。

于 2012-10-16T22:43:29.537 回答
2

在 C++ 中,表达式T()where Tis a type 是创建一个值初始化的临时变量。请注意,这与一般对构造函数的调用不同(特别是对于 POD 类型它是不同的)。

于 2012-10-16T23:19:07.573 回答