【发布时间】:2012-05-02 14:53:41
【问题描述】:
如果一个函数只需要查看一个参数的值,你不应该总是通过常量引用来传递那个参数吗?
我的一个同事说小字体没关系,但我不同意。
那么这样做有什么好处吗:
void function(char const& ch){ //<- const ref
if (ch == 'a'){
DoSomething(ch);
}
return;
}
在此:
void function(char ch){ //<- value
if (ch == 'a'){
DoSomething(ch);
}
return;
}
在我看来,它们的大小相同:
#include <iostream>
#include <cstdlib>
int main(){
char ch;
char& chref = ch;
std::cout << sizeof(ch) << std::endl; //1
std::cout << sizeof(chref) << std::endl; //1
return EXIT_SUCCESS;
}
但我不知道是否总是这样。
我相信我是对的,因为它不会产生任何额外的开销并且是自我记录的。
但是,我想问问社区我的推理和假设是否正确?
【问题讨论】:
-
您的演示代码似乎表明
sizeof(ch)与sizeof(ch)相同——这是您的意图吗? -
即使您的意思是
sizeof(chref)用于其中之一,您仍然会得到相同的大小。但这无关紧要,因为当您执行sizeof(chref)时,它实际上是在告诉您ch 的大小。一旦你初始化了一个引用,对它的所有操作就好像它们实际上是在所指对象上完成的一样。但这并没有告诉你任何关于编译器魔法可能在幕后发生的事情。
标签: c++ reference constants parameter-passing