- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我认为以下是非常基本的,但我真的不明白其中一个代码的“优势”是什么。
有这个:
int main()
{
int a = 10;
f(a);
return 0;
}
有什么区别
void f(int& a)
{
int& b = a;
}
和
void f(int& a)
{
int b = a;
}
特别是,在 f
代替类的构造函数并且我们有一个大对象而不是 int
的情况下。
我会选择第二种可能性......你怎么看?
谢谢。
编辑:
首先,看答案,虽然我发问题的时候脑残了,但实际上我在评论中发现了有趣的子问题(和答案!)。
最佳答案
首先:
void f(int& a) {
int& b = a;
}
调用者传入一个a
,我们得到它作为对调用者的a
的引用。然后我们创建一个新的引用 b
,它引用 a
,它仍然是调用者的 a
。因此,调用者所做的任何更改都将对 f
及其包含类可见,并且 f
对 a
或b
将影响调用者作为 a
传递的内容。
void f(int& a) {
int b = a;
}
这里,b
是一个新变量,一个int
,它采用a
的拷贝。对 b
所做的更改不会影响调用者,调用者也不会影响 b
。但是编写相同内容的更快方法是:
void f(int b) {
}
并完全放弃 a
引用。特别是,这在原型(prototype)中表明该函数不会修改其参数,因为它不能;而 void f (int &a)
的原型(prototype)表明它可能修改a
。
编辑:如果您需要避免任何复制,第三个选项 (tm) 是对 const 的引用:
void f(const int &a) {
const int &b = a;
}
在f
中,a
和b
都不能修改,所以不会影响调用者,但是通过使用避免了复制对 const 的引用。仍然存在一个潜在的问题,即调用者对 a
的任何更改都将在对象内部可见,因为只有一个实际数据项 a
并且它有很多名称;这是您必须记录的内容,以确保调用者不会做任何此类事情。
关于c++ - 关于引用文献的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3616804/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我对描述 PHP 内部工作原理、陷阱和一些高级功能的文献(互联网上的文章、杂志、书籍、播客 - 我真的不介意任何东西)很感兴趣。那里有这样的东西吗?我试着在谷歌上搜索,但大多数文章都是关于从 PHP
我知道这个问题的答案是否可能是主观的,(而且我还没有找到类似的问题)但我的问题如下: 我在互联网/文献上看到过不同来源的代码片段,其中一个来 self 项目中的队友。通常他们中的一些人会采用类似...
我是一名优秀的程序员,十分优秀!