草庐IT

forwarding-reference

全部标签

c++ - 数组 : Storing Objects or References

作为一名Java开发人员,我有以下C++问题。如果我有类型A的对象并且我想将它们的集合存储在一个数组中,那么我应该只存储指向对象的指针还是存储对象本身更好?在我看来,存储指针更好,因为:1)通过将对象的指针设置为null,可以很容易地删除对象2)节省空间。 最佳答案 指针还是对象?在C++中不能将引用放在数组中。您可以制作一个指针数组,但我仍然更喜欢容器和实际对象而不是指针,因为:没有机会泄漏,异常安全更容易处理。它并没有减少空间——如果你存储一个指针数组,你需要对象的内存加上指针的内存。我唯一提倡将指针(或智能指针会更好)放入容器

c++ - 如何在编译时检测 C++ 中的 std::reference_wrapper

假设我们有一些可变参数模板,需要以不同方式处理std::reference_wrapper参数。我们怎样才能做到这一点? 最佳答案 你可以做一个特征来判断一个类型是否是reference_wrappertemplatestructis_reference_wrapper:false_type{};templatestructis_reference_wrapper>:true_type{};然后你可以用它来消除歧义:templatevoiddo_stuff(T&&t,false_type){coutvoiddo_stuff(T&&r

c++ - 为什么 C++ 字符串不需要 std::forward 来调用所需的函数?

我正在学习std::forward。我写了一个简短的程序来测试如果我们在将参数转发给另一个函数调用之前不调用std::forward会发生什么:#include#include#includeusingnamespacestd;classExample{};ostream&operatorvoidtest_forward_wrapper(T&&arg){test_forward_inner(arg);}intmain(){Examplee;test_forward_wrapper(e);test_forward_wrapper(Example());cout在这里,我尝试将左值和右值从

c++ - 如何创建一个多次使用一个值而不复制它的宏?

我想创建一个宏,将一对变量解包为两个局部变量。如果它只是一个变量,我不想创建该对的拷贝,这将完成:#defineUNPACK_PAIR(V1,V2,PAIR)\auto&V1=PAIR.first;\auto&V2=PAIR.second;UNPACK_PAIR(one,two,x);但是,我也希望它不要多次计算它给出的表达式,例如这应该只调用expensive_computation()一次:UNPACK_PAIR(one,two,expensive_computation());如果我这样做:#defineUNPACK_PAIR_A(V1,V2,PAIR)\autotmp=PAIR

c++ - undefined reference 和非虚拟 thunk

这个问题不太可能帮助任何future的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visitthehelpcenter.关闭9年前。我有这样的类(class):classProduct{public:virtualdoublegetPrice();virtualvoidsetPrice(doubleprice);};classMusicProduct{protected:stringauthor;doubleprice;public:virtualstringgetAuthor();v

c++ - 对 B::B & B::~B 的 undefined reference

我不断收到g++编译器的投诉,说下面的代码有问题。仔细检查后,我还是想不通为什么从embedMain.cpp中找不到B类的构造函数和析构函数。谁能给我一点提示?谢谢//embedMain.cpp#include"embed.h"intmain(void){Bb("helloworld");return0;},//embed.h#ifndefEMBED_H#defineEMBED_H#includeclassB{public:B(conststd::string&_name);~B();private:std::stringname;};#endif,//embed.cpp#includ

c++ - 为什么没有给 std::forward_list 一个 count() 成员函数?

我明白为什么std::forward_listdoesnothaveasize()memberfunction,因为O(1)版本会搞乱某些splice()的复杂性过载,并且由于O(N)version将与标准库的所有其他容器不一致。这也是事实std::list和std::forward_list已经有几个其他成员函数与中的表亲具有相同的语义标准库的一角(merge()、reverse()、remove()、remove_if()、unique()、sort())。那么为什么不是count()O(N)的成员函数提供给std::forward_list的复杂性具有返回std::distanc

C++ 构造函数 : Perfect forwarding and overload

我有两个类,A和B,B派生自A。A有多个构造函数(下例中有2个)。B有一个额外的成员要初始化(它有一个默认的初始化器)。我怎样才能实现B可以使用A的构造函数之一来构造,而不必手动重写B中A的所有构造函数重载?(在下面的示例中,否则我必须为B提供四个构造函数:B():A(){},B(strings):A(s){},B(intb):A(),p(b){},B(strings,intb):A(s),p(b){},而不是只有两个,至少在忽略默认参数的可能性时是这样)。我的方法是完美转发,但是下面的场景会报错:#include#includestructA{A(conststd::string&a

C++ 单例 undefined reference

我是C++的新手,正在尝试理解C++中的单例模式。myclass.h#ifndefMYCLASS_H#defineMYCLASS_HclassMyclass{public:staticMyclass*getInstance();private:Myclass(){}Myclass(Myclassconst&){}Myclass&operator=(Myclassconst&){}staticMyclass*m_instance;};#endif//MYCLASS_Hmyclass.cpp#include"myclass.h"Myclass*Myclass::getInstance(){

c++ - 如何为 lambda 创建 'reference'?

我想捕获对lambda的“引用”,我认为函数指针可以解决问题,如下所示:int(*factorial)(int)=[&](intx){return(x但我得到cannotconvertfrommain::lambdatoint(_cdecl*)(int).那么指向lambda的正确方法是什么? 最佳答案 由于lambda不是无状态的,因此不能将其转换为函数指针。请改用std::function。std::functionfactorial=[&](intx){return(x 关于c++