考虑以下代码。编译器是否会生成4个函数:()每个函数都有不同的参数或只有一个?
class MyClass
{
public:
void foo() const {}
};
template<typename T>
void operate(T obj)
{
obj.foo();
}
int main(int argc, char* argv[])
{
MyClass obj;
MyClass& refObj = obj;
const MyClass& constRefObj = obj;
const MyClass constObj = obj;
operate(obj);
operate(refObj);
operate(constRefObj);
operate(constObj);
return 0;
}
答案 0 :(得分:1)
你可以试试自己。对于g++
,只需运行g++ -S file.cpp
并查看结果即可。对于您的代码,g++
生成了单个函数实现和4个调用,如下所示:call _Z7operateI7MyClassEvT_
。
答案 1 :(得分:0)
第一个声明
string url = "'<a href=''/p?geoId='+Geo.GeoId+'''>'+Geo.Name+'</a>'";
是您实际创建MyClass obj;
类型对象的地方。
第二个声明
MyClass
告诉编译器&#34;当我使用名称MyClass& refObj = obj;
时,我的意思是refObj
&#34;。没有创建新的类实例。
所以这两个电话都是
obj
将operate(obj);
operate(refObj);
的副本传递给该函数。他们只是为同一个对象使用不同的名称。所以他们肯定也称同样的功能。