【发布时间】:2013-04-29 19:15:09
【问题描述】:
这个问题是关于函数堆栈创建的。
假设我们创建一个函数 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) 或 fn(int& a, char& b) 并分别通过 fn(&A,&B) 和 fn(A,B) 从我们的 main 调用,在这种情况下,还将创建一个函数堆栈返回地址、SP 等。我的问题是,在这种情况下,是否会在堆栈上创建本地指针或引用(即创建指向传递对象的指针或引用的本地副本)。还是没有创建object的本地副本,直接传递指针或引用指向的原始对象?
3) 我们可以重载像fn(int& a,char& b) 和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
【问题讨论】:
标签: c++ constructor