通行证参考和内存使用情况
Pass by Reference and Memory Usage
在C++中通过引用传递参数时,它如何处理基于其中一个引用定义的变量。例如,我创建了一个函数MyFunc1
,然后创建了另一个尝试实现相同功能的函数MyFunc2
。在第二种情况下,存在一个根据x
定义的y
。就使用的内存量而言,y
是否也被视为参考?
int MyFunc1(const int &x, const int &a, const int ×_minus_one=1) {
if (times_minus_one == 1) {
return -x * a;
} else {
return x * a;
}
}
和
int MyFunc2(const int &x, const int &a, const int ×_minus_one=1) {
int y = x;
if (times_minus_one == 1) {
y = y * -1;
}
return y * a;
}
根据您在MyFunc2中定义y的方式,y是原始变量的副本。在这里,副本在堆栈上被实例化,并将占用堆栈上的sizeof(y)内存。
例如,如果您将y定义为const auto& y = x;
,那么y将是一个引用,它只是一个指针的大小。
代码中的y
只是一个整数,您可以将x
的值赋给它。它可能使用也可能不使用任何内存——标准没有具体说明。至于引用的内存占用,通常它们的行为与指针相同。
相关文章:
- 如何在没有死锁和/或争用的情况下正确使用 std::mutex C++?
- 在集合的情况下使用emplace_hint的用例是什么?
- 在没有堆的情况下用两种方法构造对象
- 如何在不中断的情况下正确使用C++中的切换用例语句中的Fallthrough
- 给定一个填充无符号字符**的 C 函数,如何在没有中间副本的情况下用数据填充 std::vector
- 在这种情况下,有没有办法用单个解决方案替换两个仅在类型上不同的相似函数?
- 为什么在一种情况下,我会收到带有字符串文字的已弃用转换警告,而在另一种情况下却没有?
- 不能在没有对象的情况下调用成员函数,但我用对象调用函数
- 在不先显式调用析构函数的情况下,在旧对象上使用placement new是否危险
- 无法在前面有多余空格的情况下获取要打印的数组.只有第一个值会用空格打印
- 在可疑的情况下发出叮当警告:函数'foo'可以用属性"noreturn"声明吗?
- 如何在没有任何JavaScript知识的情况下用PNaCl编写C++HTML5应用程序
- 如何在不使用开关大小写的情况下用C++编写菜单驱动的程序
- 在什么情况下,运算符=应该用左值/右值重载而不是复制和交换来实现
- 在没有测试用例的情况下提升单元测试框架
- 在这种情况下,为函数赋值有什么用
- 如何在没有_setmode的情况下用C++输出unicode
- 如何在没有STL的情况下用c++中的Key创建和访问内存块
- 如何在不锁定文件的情况下用C++编写文件
- clang与gcc运行时的区别:用clang构建的c++类模板在没有复制构造函数的情况下崩溃,用复制构造函数构建的gcc