问题标签 [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 投票
2 回答
106 浏览

c++ - 通过大参数自动使用 const-ref

当我有以下伪类时:

当 sizeof(T) 大于系统架构时,void doSomething(T input)有没有办法改变。void doSomething(const T& input)

意味着,tmplClass<char> c;例如,当你有使用void doSomething(T input)时,当你有tmplClass<[another big class with lots of variables]>使用时void doSomething(const T& input)

  1. 我可以从中得到任何优化吗?
  2. 有什么我必须做的,或者 gcc 可以自动做吗
  3. 如果我必须做某事,怎么办?
0 投票
2 回答
1941 浏览

c++ - 对临时对象的 const 引用在函数范围(生命周期)之后被破坏

在问这个问题时,我了解到对临时对象的 const 引用在 C++ 中是有效的:

但在下面的示例中, const 引用refnop指的是已销毁的临时对象。我想知道为什么?

使用 GCC 4.1.2 和 MSVC 2010 测试,它返回 4;

ref和之间的区别在于实际上什么都不做refnop的调用。nothing()似乎在这个调用之后,临时对象被破坏了!

我的问题:
为什么在 的情况下refnop,临时对象的生命周期与其 const 引用不同?

0 投票
1 回答
950 浏览

c++ - 通过 const 引用临时延长寿命

0 投票
2 回答
989 浏览

c++ - const 引用和 const 指针上的 new-expression 和 delete-expression

C++

许多文献说const引用不能用来修改它们的所指对象,const指针不能用来修改它们的指针。

那么,为什么他们可以是deleted?

我知道后面的 const inT* const只会防止指针被重新定位,但在下面我使用两个consts,如 in const T* const,以强调。为什么后面的指针可以是deleted?

输出显示至少有一些动态分配的内存被释放。是否所有这些都被释放了,或者在只有副本被释放的情况下是否存在复制?

const 引用片段 ( int&) 的非 const 版本和 const 指针 const 片段 ( ) 的非前导 const 版本int* const ) 的非 const 版本和 const 指针 const 片段 ( andint*产生与其更多 const 对应物相同的输出。在所有 5 种情况下,为什么以及如何延长临时 new-expression 的生命周期?

如果数据类型是类或结构,则假设相应的运算符没有被重载、显式删除或设为非公共,标准是否做出以下保证:

  • 解引用运算符提供对指针对象的直接访问

  • new运算符生成指向动态分配内存的指针,而不是原始动态分配内存的动态分配副本

相反,如果new运算符重载但仍返回::operator new(size),而解引用运算符重载但仍返回对对象的引用,是否有任何副作用会使这两点不成立?

0 投票
5 回答
2268 浏览

c++ - 为标准 C++ 类型定义 NULL/Empty 值

我的班级有返回的方法,const <Container>&因为我不希望返回的容器在外部被修改,并且复制可能很昂贵。例如:如果必须的话const std::set<ClassA>& foo(),我希望foo()能够返回对空的 const 引用std::set<ClassA>。IE

但我不能真正返回对临时构造的空std::set<ClassA>in的 const 引用foo()。为了解决这个问题,我在一个公共位置定义了一个通用模板单例类,以便它可以与任何类型一起使用

所以现在foo()可以像

我想知道的是,是否有更好的方法来解决这个问题,以及这个设计是否有任何问题?

0 投票
2 回答
806 浏览

c++ - const 引用的类型是什么?

我知道将 const 引用变量传递给函数的 const 引用参数不会导致函数参数属于“裁判类型的 const 引用的 const 引用”类型。const 引用参数的变量名仅被视为裁判的另一个别名,但以不能使用该别名来修改裁判的保护为荣。

将引用变量的名称用作裁判变量的别名的想法很好地适用于variables,从而提供了另一层间接性。应用类似的想法似乎没有意义:

  • const 引用类型本身被用作其裁判类型的别名,
  • const 引用类型typedef的 a被用作其裁判类型的别名,
  • 当模板参数为且其函数参数为时,传递给(或由其推导)template参数的 const 引用变量将其类型解释为其裁判的类型。typename TT const&

但这似乎发生在以下情况:

  1. 为什么函数模板即使对已经存在的参数也有效int const&?(在示例代码中,它甚至适用于将int const&变量作为第一个参数并将int变量作为第二个参数的调用。)它不应该是无效的,因为 C++ 不允许“引用的引用”吗?

  2. 不应该是,而不是typeidname()int const&int const&int

  3. 如果不是,那么这不是;int const&的别名吗?int这没有任何意义,因为两者都是不同的类型(不是变量的名称)?

  4. 回到变量名,给定:

    为什么是输出int,而不是int const&

0 投票
5 回答
99685 浏览

c++ - C++ 返回值、引用、常量引用

你能解释一下返回值、引用值和 const 引用值之间的区别吗?

价值:

非常量参考:

常量参考:

这有什么好处?我理解将 const 引用传递给函数背后的意义,因为您要确保不修改该引用指向函数内部的值。但是我对返回 const 引用的含义感到困惑。为什么返回引用优于返回值,为什么返回 const 引用优于返回非 const 引用?

0 投票
1 回答
131 浏览

c++ - decltype 和括号的答案是错误的?

我读到这个:decltype 和括号

但我无法理解答案!

如果 (a->x) 的类型是 const double& 为什么这段代码会运行?!

0 投票
1 回答
860 浏览

c++ - 常量引用参数导致无法解析的外部符号

下面是我编写的一些代码的简化版本。到目前为止,此代码工作正常

类.h

类.cpp

(OtherClass 在 myNamespace 中的其他地方定义并包含在内)

使用 OtherClass 的构造函数不会改变 other,因此将其设为 const 是合适的。

但是,当我更改 .cpp 和 .h 中的构造函数以使用const OtherClass&它时,会出现错误:

错误 LNK2019:未解析的外部符号“公共:__thiscall myNamespace::myClass::myClass(class myNamespace::OtherClass &,unsigned int,unsigned int)”(??0CarbonMatrix@molecule@@QAE@AAVCarbonString@1@II@Z)在函数 _wmain path\main.obj 中引用

据我所知,只要在声明和定义中都使用 const 就不会导致此错误。

所以我的问题是:出了什么问题以及如何解决?

0 投票
2 回答
6845 浏览

c++ - 成员函数上的 const 引用限定符

我在那里的anwser中看到: 通过右值引用返回更有效吗?

成员函数定义:

我熟悉成员函数上的cv-qualifier ( ),但不熟悉.constconst&

最后一个const&是什么意思?