问题标签 [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.
c++ - 是否有任何 C++ 编译器可以针对悬空引用发出警告?
给定以下代码,其中x
danglingconst reference
是一个消失的对象,因此是未定义的行为。
似乎GCC 7.3、Clang 6.0和MSVC都无法发出警告,即使启用了所有警告。有谁知道在这些情况下是否可以发出警告?在这些情况下const auto&
和之间有什么区别吗?auto&&
注意,如果back()
按值返回,它不会是未定义的行为,因为生命周期临时对象 x 被扩展为函数 scoop。
长话短说:我有一个代码库,const auto&
用作初始化变量的默认方式,出于某种奇怪的原因,这些案例使用 MSVC 正确执行,但是当使用 Clang for android 编译时,每次出现都会导致错误分配的值。目前,该解决方案似乎调查const auto&
了整个代码库中的每一个。此外,在许多情况下,const auto&
引用引用返回的重对象,因此简单地删除&
不是解决方案。
还有一件事,我负责误用const auto&
:)
c++ - 是否参考右值
我想知道下一个代码是否可以使用 v 和 v2 变量正确工作,或者这些是临时变量的引用?换句话说,我可以通过引用捕获返回的右值吗?我不认为,但我的团队负责人认为另一种方式。
c++ - 与引用一起使用的列表,用作成员时更改行为
试验这个问题/答案https://stackoverflow.com/a/50649120/225186我产生了一个似乎是实现循环列表的合法递归自引用类:
但是,当我尝试将其作为更大类的成员时,我会收到来自编译器的警告并且行为会发生变化。
我得到的警告是gcc: warning: a temporary bound to ‘A::n’ only persists until the constructor exits [-Wextra]
. 我不相信警告是正确的,但是它与后来的运行时错误一致。
我承认这个类是非常规的,但是,一个类怎么会改变一个类内部的行为呢?
我错过了什么吗?
c++ - 在运算符重载中使用带有 const 引用的友元函数
下面的代码无法编译。但是,当我从朋友函数的 Point& 中删除“const”时,此代码将被编译。任何人都可以解释原因吗?
c++ - 在类成员函数中将 const 引用作为函数参数传递
假设我们有一个名为的类Line
,其中包含以下修饰符,该修饰符将值分配给类数据成员。
void Start(const Point &start);
line 类包含两个名为 start 和 end 的数据成员,它们都是 Point 对象。由于start
函数参数中的变量是引用,我实现如下:
void Line::Start(const Point &start) {
m_start = start;
}
在主要功能中,我有以下内容。
Line line;
Point start(1, 1);
line.Start(start);
m_start
数据成员现在是否会直接start
Point
引用主函数中的对象,因为它是通过引用传递的?
c++ - 如何为模板类的 const ref 成员定义移动赋值运算符
我有以下模板类,其中成员是const ref
类型。对象的复制被禁用,只需要移动 cntor 和移动赋值运算符。
Q1:如何正确实现移动赋值运算符const ref type
(是否正确,我所做的)?
Q2:为什么会这样
发生了?
Q3:在main()
移动的实例中可以调用 using print()
。是UB吗?
我正在使用Visual Studio 2015 (v140)。这是我的代码:
c++ - const 引用作为类的成员不一致
如果创建一个对临时对象的 const 引用,它的寿命就会延长,就像引用在堆栈中的位置一样。这是该语言的一个很好的特性,尽管它有时会像其他规则的例外一样出现。 https://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/
但是,当 const 引用是类成员的一部分时,这不起作用。这是语言不一致吗?
示例代码:
是否有一种解决方法可以使其工作或至少表现得更一致?
我发现这在现在的一些情况下是一个限制因素。例如,List using with references,在用作成员时更改行为和https://stackoverflow.com/a/51878764/225186
EDIT1:在其他类似问题的答案中提到,问题在于构造函数采用了const&
规则不适用的地方。然而,一个完美的前锋仍然失败。在这种情况下,要么语言的不一致更加明显,要么完美的前锋不那么完美。
EDIT2:声明single const& s{f(3)};
仍然无济于事。但是,将常量“移动”到结构会有所帮助。
因此,将常量转移到整个结构也许是一种好习惯。
我仍然认为参考成员在语言中的行为很奇怪。https://www.youtube.com/watch?v=uYDt1gCDxhM
EDIT3:正如@Oliv 提到的,如果使用聚合初始化,情况会有所改善。然而,这是相当有限的。
c++ - C++ 中 const 引用对象的条件赋值
这是一个说明我的问题的代码片段:
如何在 if else 块之后访问reward
对象?foo3()
这是避免代码重复所必需的。
提前致谢 !
c++ - 如何使具有引用数据成员的类可以在没有参数的情况下构造?
我有一个类,比如 C,其中一个成员数据,比如 X,取决于用户输入。每次运行时用户输入可能不同,在我当前的设计中,我的类的所有实例都存储对同一个对象 X 的引用。
我如何调整设计以使其允许不带参数的默认构造函数?
这样我可以使用复制赋值/复制构造函数,制作 C 数组,使用临时右值等。
以下是说明我的问题的最小工作示例。在我使用的情况下,Tag 指的是一些外部资源。
c++ - 为什么 const 引用会抑制 C++ 中的自动转换
在“Introduction to Design Patterns in C++ with Qt”一书中,我发现“通过 const 引用传递仍然稍微快一些,这使得 C++ 可以完全优化复制操作。使用 const 引用,函数无法更改引用,并且不会发生自动转换。”
“不会发生自动转换”是什么意思?