-2 c++ constructor function function-calls
我想在下面的程序中要求澄清构造函数调用顺序.
我尝试了什么:
输出以1 3开始.我试图调试它,看看为什么函数"f"在第二个之前调用第三个参数的ctor并且我没有真正得到它.
我试图将参数"1"作为最后一个(当然我也根据需要改变了函数签名),然而,"1"是第一个参数调用它的ctor.
我尝试做不同的电话订单,并对最新情况做了一些假设.
它似乎从最后一个参数调用ctors到第一个参数,而参数不是int(float等...)类型,如果它是这些类型中的一个,它首先以相同的顺序调用它们的ctor(从最后到第一次越过其他人)
那么,有什么想法吗?我想知道真正发生了什么.谢谢.
#include <conio.h>
#include <iostream>
using namespace std;
class A {
int i;
public:
A(int i) : i(i) {
cout << i << endl;
}
A(const A &o) : i(o.i) {
cout << i << endl;
}
~A() {
cout << i << endl;
}
friend A f(const A &, A , A *);
};
A f(const A &a, A b, A *c) {
return *c;
}
void main() {
f(1, A(2), &A(3));
}
Run Code Online (Sandbox Code Playgroud)
函数参数的评估顺序在C++中未指定.它不是从左到右.当您有一个接受多个参数的函数时:
void foo(A a, B b, C c);
Run Code Online (Sandbox Code Playgroud)
这并不意味着参数将以a - > b - > c顺序进行评估.不要将函数签名(评估)与函数定义中的语句块(执行)混淆.
另外,如果你带有一个临时的地址会&A(3)导致错误,你不需要<conio.h>标题,你应该避免使用using namespace std;.