问题标签 [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++ - 通过大参数自动使用 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)
- 我可以从中得到任何优化吗?
- 有什么我必须做的,或者 gcc 可以自动做吗
- 如果我必须做某事,怎么办?
c++ - 对临时对象的 const 引用在函数范围(生命周期)之后被破坏
在问这个问题时,我了解到对临时对象的 const 引用在 C++ 中是有效的:
但在下面的示例中, const 引用refnop
指的是已销毁的临时对象。我想知道为什么?
使用 GCC 4.1.2 和 MSVC 2010 测试,它返回 4;
ref
和之间的区别在于实际上什么都不做refnop
的调用。nothing()
似乎在这个调用之后,临时对象被破坏了!
我的问题:
为什么在 的情况下refnop
,临时对象的生命周期与其 const 引用不同?
c++ - const 引用和 const 指针上的 new-expression 和 delete-expression
C++
许多文献说const
引用不能用来修改它们的所指对象,const
指针不能用来修改它们的指针。
那么,为什么他们可以是delete
d?
我知道后面的 const inT* const
只会防止指针被重新定位,但在下面我使用两个const
s,如 in const T* const
,以强调。为什么后面的指针可以是delete
d?
输出显示至少有一些动态分配的内存被释放。是否所有这些都被释放了,或者在只有副本被释放的情况下是否存在复制?
const 引用片段 ( int&
) 的非 const 版本和 const 指针 const 片段 ( ) 的非前导 const 版本int* const
) 的非 const 版本和 const 指针 const 片段 ( andint*
产生与其更多 const 对应物相同的输出。在所有 5 种情况下,为什么以及如何延长临时 new-expression 的生命周期?
如果数据类型是类或结构,则假设相应的运算符没有被重载、显式删除或设为非公共,标准是否做出以下保证:
解引用运算符提供对指针对象的直接访问
new
运算符生成指向动态分配内存的指针,而不是原始动态分配内存的动态分配副本
相反,如果new
运算符重载但仍返回::operator new(size)
,而解引用运算符重载但仍返回对对象的引用,是否有任何副作用会使这两点不成立?
c++ - 为标准 C++ 类型定义 NULL/Empty 值
我的班级有返回的方法,const <Container>&
因为我不希望返回的容器在外部被修改,并且复制可能很昂贵。例如:如果必须的话const std::set<ClassA>& foo()
,我希望foo()
能够返回对空的 const 引用std::set<ClassA>
。IE
但我不能真正返回对临时构造的空std::set<ClassA>
in的 const 引用foo()
。为了解决这个问题,我在一个公共位置定义了一个通用模板单例类,以便它可以与任何类型一起使用
所以现在foo()
可以像
我想知道的是,是否有更好的方法来解决这个问题,以及这个设计是否有任何问题?
c++ - const 引用的类型是什么?
我知道将 const 引用变量传递给函数的 const 引用参数不会导致函数参数属于“裁判类型的 const 引用的 const 引用”类型。const 引用参数的变量名仅被视为裁判的另一个别名,但以不能使用该别名来修改裁判的保护为荣。
将引用变量的名称用作裁判变量的别名的想法很好地适用于variables,从而提供了另一层间接性。应用类似的想法似乎没有意义:
- const 引用类型本身被用作其裁判类型的别名,
- const 引用类型
typedef
的 a被用作其裁判类型的别名, - 当模板参数为且其函数参数为时,传递给(或由其推导)
template
参数的 const 引用变量将其类型解释为其裁判的类型。typename T
T const&
但这似乎发生在以下情况:
为什么函数模板即使对已经存在的参数也有效
int const&
?(在示例代码中,它甚至适用于将int const&
变量作为第一个参数并将int
变量作为第二个参数的调用。)它不应该是无效的,因为 C++ 不允许“引用的引用”吗?不应该是,而不是
typeid
?name()
int const&
int const&
int
如果不是,那么这不是;
int const&
的别名吗?int
这没有任何意义,因为两者都是不同的类型(不是变量的名称)?回到变量名,给定:
为什么是输出
int
,而不是int const&
?
c++ - C++ 返回值、引用、常量引用
你能解释一下返回值、引用值和 const 引用值之间的区别吗?
价值:
非常量参考:
常量参考:
这有什么好处?我理解将 const 引用传递给函数背后的意义,因为您要确保不修改该引用指向函数内部的值。但是我对返回 const 引用的含义感到困惑。为什么返回引用优于返回值,为什么返回 const 引用优于返回非 const 引用?
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 就不会导致此错误。
所以我的问题是:出了什么问题以及如何解决?