pass-by-reference 相关问题

通过引用传递是一种参数编组策略,其中变量在内存中的位置传递给函数,而不是变量值的副本,尽管函数出现在源代码中以接收变量本身而不是指向它的指针。

如何在C中实现单例对象?

我需要一个对象被其他对象使用。要求是对象不需要通过任何外部调用进行初始化。所以我从这样的事情开始...... // .h 结构

回答 1 投票 0

为什么我可以通过引用传递一个不存在的变量? [重复]

今天我在 PHP 8.2 中遇到了一个我没有预料到的行为。参见下面的代码: 代码 函数 foo(&$未定义) { 如果(\is_null($未定义)){ return \sprintf('值: "%s&...

回答 1 投票 0

PHP 8.2:为什么我可以通过引用传递不存在的变量?

今天我在 PHP 8.2 中遇到了一个我没有预料到的行为。请看下面的代码: 代码 函数 foo(&$未定义) { 如果(\is_null($未定义)){ return \sprintf('值: "%s&...

回答 1 投票 0

如何附加类函数作为 ISR 回调

我正在尝试附加一个类函数作为 ISR 回调,但收到此错误: lib/classA/classA.cpp: 在成员函数 'uint8_t MethodA::Init()' 中: lib/classA/classA.cpp:32:71:错误:无效...

回答 1 投票 0

在 C# 中通过引用或值传递对象

在C#中,我一直认为非原始变量是通过引用传递的,而原始值是通过值传递的。 因此,当将任何非原始对象传递给方法时,对对象所做的任何操作...

回答 9 投票 0

既然java只传递值而不传递引用,为什么当我们将数组传递给方法时,它内部的变化也会反映在main中

当数组传递给方法时,该方法接收什么? 我遇到了这个问题,我认为答案必须按值传递,就像将副本传递给方法一样,无论我们何时更改......

回答 1 投票 0

创建哈希图以将引用存储为 Pub-Sub 的值

我需要创建一个哈希图,将对其他对象的引用存储为值,并将这些对象的名称作为键(HashMap)。 整个系统就像一个迷你车...

回答 1 投票 0

了解编译器何时复制、移动或就地构造

我一直在阅读复制和移动语义,以提高我对何时使用 T 与 T const & 与 T && 的了解 我写了一小段测试代码来验证我的直觉 #包括 我一直在阅读复制和移动语义,以提高我对何时使用 T vs T const & vs T && 的了解 我写了一小段测试代码来验证我的直觉 #include <iostream> #include <utility> #include <vector> template< int i > struct Example { Example(){ std::cout << "("<< i<<") was made\n"; } Example( Example const & ){ std::cout << "("<< i<<") was copied\n"; } Example( Example && ){ std::cout << "("<< i<<") was moved\n"; } ~Example(){ std::cout << "("<< i<<") was destroyed\n"; } std::vector< int > x = {1,2,3,4}; }; template< int i > struct Test { Example< i > example; // Test( Example< i > example ): example( example ) {} // Test( Example< i > const & example ): example( example ) {} // Test( Example< i > && example ): example( std::move(example) ) {} }; int main() { Example<1> example1; Example<2> example2; std::cout << "Test1\n"; Test test1{ example1 }; std::cout << "Test2\n"; Test test2{ std::move(example2) }; std::cout << "Test3\n"; Test test3{ Example<3>() }; std::cout << "Tests done \n"; } 这会产生我期望的输出: (1) was made (2) was made Test1 (1) was copied Test2 (2) was moved Test3 (3) was made Tests done (3) was destroyed (2) was destroyed (1) was destroyed (2) was destroyed (1) was destroyed g++ -std=c++20 -O3 向 Test 添加显式构造函数 Test( Example< i > const & example ): example( example ) {} Test( Example< i > && example ): example( std::move( example ) ) {} 仍然符合我的直觉,因为现在只有复制和移动,test3现在诉诸于使用移动。 但是当仅定义以下构造函数时 Test( Example< i > example ): example( example ) {} 我明白了 (1) was made (2) was made Test1 (1) was copied (1) was copied (1) was destroyed Test2 (2) was moved (2) was copied (2) was destroyed Test3 (3) was made (3) was copied (3) was destroyed Tests done (3) was destroyed (2) was destroyed (1) was destroyed (2) was destroyed (1) was destroyed 虽然我能理解example1的额外副本,但它对我来说仍然显得很奇怪。然而,与example3发生的事情结合起来是没有意义的,我要么也期望两份副本,要么移动。 我一直有这样的印象: 如果您计划获取资源的副本,则按值传递,并且如果将临时值传递给此函数,则编译器可以使用移动,甚至就地构造对象 如果您计划仅查看对象 (const &) 或者计划设置值,则可以通过左值引用传递。 如果您计划获得资源的所有权,则可以传递右值引用。 在这个例子中,情况似乎并非如此,如示例中给出的 Example 包含一个向量,因此复制不是最轻的操作,移动会更好。 所以我的问题总结是: 为了避免昂贵的副本并允许就地构建,什么时候应该使用T、T&、T const &和T&&(也许是T const &&)。 这也是在函数的上下文中,而不仅仅是构造函数。 (注意:在构造到位后,我的意思是最初 test3 所示的现象,其中临时对象既没有移动也没有复制到 test3 中) 总之,优先参考T&,除非字体很小,比如int。如果调用者代码不会使用该类型,请考虑 T&& + std::move()。 代码的简单性比速度更重要,除非您测量到这是程序的热点。 您在评论中链接的 C++ 核心指南:https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#fcall-parameter-passing

回答 1 投票 0

是否可以传递Python列表切片作为参考?

我正在玩python,尝试使用各种方法来减少内存使用。出现的一个问题是是否有一种方法可以传递列表切片作为对原始列表的引用。 原因是

回答 1 投票 0

修改Javascript中通过引用传递的变量

我正在观看 JavaScript 演讲,导师说如果我们在函数中传递对象的属性,它实际上会改变实际值,因为我们将通过引用传递变量...

回答 5 投票 0

为什么 cin 没有像 C 中的 scanf() 那样的 & 运算符或说明符格式?

就像我在学习C++动态内存分配时遇到了这个疑问,现在就无法再专注于学习它了。 :( 整数 n; 计算<< "Enter array size: "; c...

回答 2 投票 0

使用具有按引用传递构造函数参数的类初始化向量,并将该引用保存为成员

我试图创建一个在向量中的项目之间共享的类型的单个实例。每个向量的项类型都需要在构造函数中传递引用参数...

回答 1 投票 0

是否可以修改函数内部结构体指针的内容?

我是C初学者,我试图创建一个修改结构体指针内容的函数,但它无法成功,相反,内容保持不变。 这是我的代码: #包括 #

回答 3 投票 0

如何使用 std::reference_wrapper 将引用存储在 std::unordered_map 中?

我正在尝试学习 std::reference_wrapper 和 std::ref 的使用及其用例。 这是我编写的示例代码。请帮我解决编译错误。如果可以的话那就太好了

回答 1 投票 0

如何使用 std::reference_wrapper 将引用存储在 unordered_map 中?

我正在尝试学习 std::reference_wrapper 和 std::ref 的使用及其用例。 这是我编写的示例代码。请帮我解决编译错误。如果可以的话那就太好了

回答 1 投票 0

如何使用 std::reference_wrapper 将引用存储在 unordered_map 中?

我正在尝试学习 std::reference_wrapper 和 std::ref 的使用及其用例。 这是我写的示例代码,请帮我解决编译错误,如果你ex的话那就太好了...

回答 1 投票 0

如何通过引用传递变量?

在其他编程语言中,我们使用 & 关键字通过引用传递变量。 例如,在 php 中; $a = 10; 函数某事(&$a){ $a = 7; }; 某事($a); 回显 $a; // ...

回答 2 投票 0

Javascript:按引用传递

有人可以在下面的代码中解释我,为什么当我执行 o = {} 时,对象没有被重置? var funky = 函数 (o) { o.z = 空; o.a =“aaa”; o = {}; }; var x = { z: ...

回答 3 投票 0

揭示编译器在传递给引用与传递给 const 引用时所做的事情

编译下面所示的代码,并检查反汇编(objdump -DSs a.out > a.dis),我看不到调用 fun_ref(T &) 和 fun_const_ref(cons...

回答 1 投票 0

在C++中是否可以传递带有默认值的函数inout参数

让我打破如果标题令人困惑,我们可以用c++编写函数吗,像这样的东西,可能不完全像这样,语法可能不同 void FunctionTest(int param1, _Inout_ int& param...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.