![]() |
1
1
这很容易,丹尼尔:
这看起来不像一个名为“示例”的函数,是吗?函数有一个返回值、一个名称和参数。上述内容如何与之相匹配?
是的,因为你不创建任何实例
|
![]() |
2
5
这 question 将有助于理解这种行为 |
![]() |
3
1
嗯……好吧,这个: 示例e1(); 不起作用。你可能认为它起作用了,或者一些编译器正在接受它,但它并没有创建一个名为e1的示例实例,它只是声明了一个函数原型。去掉括号,它就会按照你的意愿工作。 这个: 示例*e1=新示例(); 无法工作,因为构造函数是私有的。如果你将构造函数公开,它将在堆上创建对象,e1将是指向该对象的指针。完成该对象后,您需要将其删除。 |
![]() |
4
1
对于第一个问题,“new Example()”是否有效。是的,这是完全合法的C++代码。虽然要完全正确,你需要在从main()返回之前删除对象,否则会导致内存泄漏。 例子:
最后一个问题。行“Example e1();”是有效的,因为它声明了一个函数原型。这实际上并不会导致机器代码被执行(很可能是堆栈空间)。它只是说,有一个没有参数的函数原型,返回一个示例类型。 第二条线肯定会失败。此时,您正试图实际执行示例的构造函数。这是不合法的,因为函数的可访问性是私有的,因此编译器错误。 |
![]() |
5
0
我认为你应该区分“this resolves”、“this compiles”、“this links”和“this works”,并试着像C++解析器/编译器/链接器一样思考,看看第一个例子
看起来像一个函数声明。语法分析器
将
这样理解它,所以你不能在上调用例如成员函数
(附带说明:此代码还将编译:
但是编译器完成后,链接器将开始查找实际的函数体,但找不到任何函数体。) 现在自从线
包含关键字
|