C++ 语言中的参考
Reference in c++ language
我正在学习c ++,我认为到目前为止一切都很好。我阅读了参考资料并做了一些练习(简单(。但是这段代码存在一个理解问题:
const ints GetMax (const int& valuel, const int& value2)
.
谁能帮助我理解为什么它传递带有函数名称的引用以及它将做什么(也在其参数类型中(?在这种情况下,引用将做什么???
C++中的引用就是这样,它是一个引用其他变量的变量名称。
从陈述的角度考虑:
int xyzzy = 1;
int &plugh = xyzzy;
int twisty = xyzzy;
这里xyzzy
的实际"对象"是包含值1
的东西。你用它的名字来称呼它xyzzy
但这实际上只是一个名字。
plugh
是对完全相同的基础对象的另一个引用 - 更改plugh
的值也会更改xyzzy
的值,因为它们都是同一事物的名称(引用(。
另一方面,twisty
变量被创建为一个新对象,并简单地将xyzzy
的值复制到它上面。
您经常会看到以下内容:
void fn(const string &str1) { ... }
在代码中,因为将引用传递给构造/复制相对昂贵的对象(如字符串(更有效。传递对对象的引用允许您直接访问当前存在的对象,并使其const
可防止函数更改它。
使用像int
这样的基本类型完成此操作是非常不寻常的,因为复制它们的成本非常小,通常与传递对它们的引用的成本大致相同。
您偶尔会看到以下内容:
void fn(int &thing) { ... }
但这通常是因为thing
应该在函数中更改,并且该更改会镜像回调用方。
您的特定代码可能正在做的事情(尽管如果没有更多上下文我无法确定(不会通过返回引用来创建任何新对象。根据我的最佳猜测,以下代码显示了它将具有的实现类型:
const int& GetMax(const int& value1, const int& value2) {
if (value1 >= value2)
return value1;
return value2;
}
有了这个,代码:
int val1 = 7;
int val2 = 42;
const int &biggest = GetMax (val1, val2);
实际上将引用biggest
设置为引用val1
和val2
中最大的一个。换句话说,它在功能上等同于伪代码:
val1 = 7
val2 = 42
if (val1 > val2)
biggest = reference to val1
else
biggest = reference to val2
如果不通过引用传递 int,则无法从函数内部修改它。整数的副本将被修改。
- C++错误消息*成员参考.**初学者*
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- 参考资源文件VC++中的$(SolutionDir)
- 不同语言中相同代码的不同行为
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 为什么在运算符重载时需要参考?
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- r语言 - C++ 类型为"const std ::?
- 通用C++/Python 多语言的存在
- 使 \page 和 \subpage 参考 doxygen 中的方法文档
- 为什么我的 EnumWindowProc 不能用 C 语言编译?
- 了解算法的性能差异(如果以不同的编程语言实现)
- Rextester 语言编译C++问题
- 如何将多种语言设置放在单个 .clang 格式文件中
- 不同语言中的模运算符差异
- 刚接触C++,难以理解语言的细微差别
- std::shared_ptr 自定义参考计数器
- 英特尔 TBB 程序不会终止,可能会误用参考计数器
- 为什么开发人员将C / C ++用于嵌入式系统,而不是像Python这样的高级语言与C相比?
- C++ 语言中的参考