这个问题是关于函数堆栈创建的。
假设我们创建一个函数fn(int a,char b)
并从 main 调用fn(A,B)
,在这种情况下,该函数被称为 fn。堆栈是使用返回地址、堆栈指针(等)创建的,其中创建局部变量和参数并在返回时被销毁。
我有几个问题:1)对于我们的参数化构造函数假设
myClass{
int a;
char c;
public:
myClass(int a,char c)
{
this->a=a;
this->c=c;
}
};
构造函数是否myClass(int a,char c)
还创建其函数堆栈并创建局部变量a
和c
.
2)现在假设我们通过引用调用:我的函数是fn(int* a,char* b)
or并且分别fn(int& a, char& b)
从我们的 main 调用,在这种情况下,还将创建一个带有返回地址、SP 等的函数堆栈。我的问题是,是否会有一个本地指针在这种情况下,或在堆栈上创建引用(即创建指向传递对象的指针或引用的本地副本)。还是没有创建对象的本地副本,而是直接传递了指针或引用指向的原始对象?fn(&A,&B)
fn(A,B)
3)我们可以重载像fn(int& a,char& b)
and这样的函数fn(int a,int b)
吗?
谢谢
编辑
#include <iostream>
using namespace std;
void fn(int , char);
//void fn (int* a, char* c);
void fn (int& a, char& c);
int main()
{
int a=10;
char c= 'c';
cout << "Inside main()" << endl;
cout << hex << "&a : " << &a << endl;
cout << hex << "&c : " << (int *)&c << endl;
fn(a,c);
//fn(&a,&c);
fn(a,c);
return 0;
}
void fn (int a, char c)
{
int tempInt;
char tempChar;
cout << "\n\nInside Call By Value Function " << endl;
cout << hex << "&a : " << &a << endl;
cout << hex << "&c : " << (int *)&c << endl;
cout << hex << "&tempInt : " << &tempInt << endl;
cout << hex << "&tempChar : " << (int *)&tempChar << endl;
}
/*void fn (int* a, char* c)
{
cout << "\n\nInside Call By Pointer Function " << endl;
cout << hex << "*a : " << a << endl;
cout << hex << "*c : " << (int*) c << endl;
}
*/
void fn (int& a, char& c)
{
cout << "\n\nInside Call By Reference Function " << endl;
cout << hex << "*a : " << &a << endl;
cout << hex << "*c : " << (int*) &c << endl;
}
输出:
$ make
g++ -Wall Trial.cpp -o Trial
Trial.cpp: In function `int main()':
Trial.cpp:19: error: call of overloaded `fn(int&, char&)' is ambiguous
Trial.cpp:5: note: candidates are: void fn(int, char)
Trial.cpp:7: note: void fn(int&, char&)
Trial.cpp:21: error: call of overloaded `fn(int&, char&)' is ambiguous
Trial.cpp:5: note: candidates are: void fn(int, char)
Trial.cpp:7: note: void fn(int&, char&)
make: *** [Trial] Error 1