问题标签 [reference-wrapper]
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++ - reference_wrapper 引用原语
我的印象是我可以使用 reference_wrapper 生成一个函子,该函子将返回传递给 reference_wrapper ctor 的对象。但这行不通。我做错了吗?如果是这样,有没有更好的方法来实现这一点?我可以写一个 lambda,似乎我不应该这样做。
c++ - 为什么 std::reference_wrapper暂时不接受?
通常,右值可以绑定到 const 引用 ( const SomeType&
)。它内置在语言中。但是,std::reference_wrapper<const T>
不接受右值作为其构造函数参数,因为相应的重载被故意删除。这种不一致的原因是什么?std::reference_wrapper
在我们必须按值传递但希望保留引用语义的情况下,被“宣传”为引用变量的替代方案。
换句话说,如果const &
绑定的右值被认为是安全的,因为它是语言内置的,为什么 C++11 的设计者不允许右值被包装在 中std::reference_wrapper<const T>
?
这什么时候会派上用场,你可能会问。例如:
c++ - 未初始化reference_wrapper的返回值
当我下面的向量reference_wrapper
指向哪里?resize()
这是未定义的行为吗?为了安全我应该怎么做?
c++ - 比较reference_wrappers的地址
我如何std::reference_wrapper
通过它们持有的引用来比较两个 s?我想看看两个std::reference_wrapper
s 的引用是否相等。
编辑:抱歉混淆。我的意思是如何获取所指对象的地址并进行比较。
c++ - reference_wrapper does not change addresses accordingly
This question is an extension of this question. I understand that due to push_back()
new memory allocation takes place and the address of the first element of std::vector v
changes but should not std::vector v2
change its address accordingly?
Output:
c++ - const 正确性与 reference_wrapper
在各种情况下,我有一个需要由许多函数处理的对象集合(例如向量)。有些函数需要修改对象,而有些则不需要。对象的类可以从抽象基类继承。因此,我有这样的事情:
显然(?)我不能将std::reference_wrapper<A>
s 的相同向量同时传递给process_1
和process_2
。到目前为止我考虑过的解决方案包括:
- 使用 C 风格的强制转换或
reinterpret_cast
对vec
- 编写我自己的引用包装器,它有
T& get()
和T const & get() const
而不是T& get() const
- 使用例如采用包装器而不是向量的方法进行重构
- 有和没有向量的副本
const
- 不使用
const
inreference_wrapper
的论点
这些看起来都不是很优雅。还有什么我可以做的吗?
c++ - Reference_wrapper:Push_back 有效但未分配
在下面的代码中,push_back()
a std::ref
into astd::vector<reference_wrapper<Type>>
效果很好,但是将 a 分配std::ref
给 areference_wrapper<Type>
不起作用。为什么?
c++ - 将指向reference_wrapper的指针转换为指向底层的指针?
这是我的情况:
我得到数据作为指针说double*
。
我想将其包装在 avector
中以使用库,并避免弄乱指针。
不想复制整个数组,我使用引用包装向量。如果我想在使用库double*
后从所说的得到返回,我可以通过转换函数来得到这个吗?vector
vector.data()
例如:
c++ - 常量reference_wrapper
在下面的代码中,目的是有一个reference_wrapper<int> b
这样的,即当a
改变时,b
也改变然而,相反的不应该被允许,即不a
应该在改变时b
改变。我尝试了两种方法:第 7 行和第 8 行。第 7 行导致编译器抱怨它无法转换为int
,const int
而第 8 行编译没有问题,但结果不是我想要的(a
更改时b
更改)。任何想法?
c++ - 重新分配后更改地址
在下面的代码中,每当将新成员插入 时std::vector<int>A
,由于内存重新分配,都会std::vector<reference_wrapper<int>>B
指向错误的地址。是否可以使引用向量跟踪重新分配并始终存储正确的地址?