问题标签 [pass-by-const-reference]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
529 浏览

c++ - std::string 如何管理这个技巧?

我刚刚写了一个函数:

但后来我称之为

它有效。所以我会认为这可以工作(一个 const char* 来初始化 std::string 的隐式实例)该值必须按值传递,但在这种情况下是通过 (const) 引用传递的。

当引用为 const 时,是否有可能从 const char* 实例化隐式时间 std::string?如果没有,那么这可能如何工作?

编辑

如果函数重载会发生什么

哪一个会选择编译器?

0 投票
6 回答
7018 浏览

c++ - 与号 & 构造函数中带有 const

有人可以告诉我为什么我们通常将 const 和 & 与一些在构造函数中传递的对象放在一起的原因吗?

我在这里的困惑是,通常在某个函数中使用 & 符号,因为该值是通过引用传递的,并且函数中该变量发生的任何更改都应在之后反映。但另一方面 const 表示不能对该变量进行赋值。

如果有人对此有一些好主意,请告诉我原因。

0 投票
3 回答
11457 浏览

c++ - 将空向量传递给对象的“正确”方法是什么?

我正在研究一个相当大的 C++ 项目,不幸的是它并没有真正充分利用 C++ 的潜力。大部分代码仍然是用可笑的 C++ 类包装的纯 C。

所以我尝试通过引入一些 C++ 和 STL 来使代码更具可读性和安全性。

但是,当我将向量分配给对象成员时,我会遇到奇怪的崩溃(确切地说是调试错误)。想象一下:

然后在代码的其他地方,我调用:

但是,程序因调试错误而终止:向量迭代器不兼容。它发生在这个任务上:

...应该制作一个副本,这是我打算做的。

但是,如果我将此行更改为:

...一切都按预期工作。

我的问题是:为什么会这样?这是用空向量初始化对象的正确方法吗?

请记住,现实中的类要大得多,传递的成员也多得多,这就是我使用初始化函数的原因。而且还有可能传递一个已经存在的数组,所以我确实需要能够将它初始化为空或使用现有数据。

编辑:我找到了崩溃的原因。我发现我正在查看的代码实际上有点不同:

所以实际上 A 的构造函数从未被调用过,因此向量成员 (m_data) 的构造函数也从未被执行过。这就是为什么在隐式调用复制函数崩溃时分配构造函数起作用的原因,因为尚未构造目标向量。好的经验教训和更可怕的代码需要改进:)

谢谢!

0 投票
3 回答
15404 浏览

c++ - 在 Qt 中发送信号时的 const-ref

这是我在 const-ref 中从未得到过的东西,我真的希望有人可以向我解释。

在另一个函数内部调用一个函数时,我知道 const-ref 是传递我不打算篡改的堆栈对象时的最佳方式。例如:

到目前为止一切顺利,我猜。但是信号呢?传递参考是否有任何风险?尽管它是const. 感觉就像我一直在阅读所有关于 const-ref 的文档,但我仍然觉得有点冒险,因为我将其理解为“发送对对象的引用并保留它const”。如果它所指的对象超出范围怎么办?

例如:

这里到底发生了什么?我经常在函数调用中使用 const-ref,我只想访问对象但不更改它。但是信号呢?大多数信号似乎在 Qt 文档中都有 const-ref parm,但它是如何工作的?

0 投票
4 回答
1672 浏览

c++ - c++ 通过 const 引用传递

在以下程序主体中包含一个指针向量。Points 是 x,y,z 坐标和 point_id 的结构。我相信由于 body 是通过 const 引用传递的,因此以下步骤应该会产生错误。但是程序运行没有任何问题。你能解释一下为什么会这样吗?

0 投票
2 回答
465 浏览

c++ - 在 C++ 中按值或按引用传输参数?

可能重复:
按引用传递比按值传递更昂贵

我想知道哪个更好,在 C++ 中按值或按引用发送参数。我听说有些情况下按值发送比按引用发送更快。这些是哪些案例?

谢谢

0 投票
2 回答
482 浏览

c++ - 我可以让 C++ 编译器决定是按值传递还是按引用传递?

看看这个假设的头文件:

现在,HungryHippo<string>您想要ingest引用字符串是有道理的——复制字符串可能非常昂贵!但对于 aHungryHippo<int>来说,它的意义不大。直接传递 anint可能真的很便宜(大多数编译器会在寄存器中这样做),但是传递对 an 的引用int是额外不必要的间接级别。这也适用于返回值。

有没有办法向编译器建议“嘿,我不打算修改参数,所以决定是通过值还是通过引用传递,这取决于你认为什么更好”?

一些可能相关的事情:

  • 我可以通过编写template <class T, bool PassByValue> class HungryHippo然后专注于PassByValue. 如果我想变得非常花哨,我什至可以PassByValue根据sizeof(T)and来推断std::is_trivially_copyable<T>。无论哪种方式,当实现看起来几乎相同时,这都是很多额外的工作,而且我怀疑编译器可以比我更好地决定是否通过值传递。
  • libc++项目似乎通过内联许多函数来解决这个问题,因此编译器可以向上一级做出选择,但在这种情况下,假设 的实现ingest相当复杂,不值得内联。正如评论中所解释的,所有模板函数都是inline默认的。
0 投票
2 回答
160 浏览

c++ - C++ pass-by-non-const-reference 方法在 pass-by-const-reference 方法中

我有这个pass_by_const(const std::string& s)想要调用的函数pass_by_non_const(std::string& s)

如果我有这个方法的定义

编译器会屈服于我吗,有解决方法吗?我担心pass_by_non_const在我背后修改 s。

0 投票
4 回答
3407 浏览

c++ - c++ 复制构造参数按值传递

我希望 freeFunct 在它自己的对象 a 副本上做非常量的事情。

假设 freeFunct 必须是一个自由函数,因为在实际代码案例中,它需要许多不同的参数,从所有这些参数中调用几个公共函数,并且将其设为任何类的非静态成员函数是没有意义的。

我想到了三种不同的声明方式。

我觉得第三种解决方案更糟糕。

前两者有区别吗?

有更好的吗?

0 投票
1 回答
3566 浏览

c++ - 在 C 中通过 const 引用传递

C 是否支持像 C++ 一样通过 const 引用传递?如果没有,是否有其他方法可以提高按值传递的效率?我认为仅将引用传递给函数是没有意义的,因为它更有效。