草庐IT

add_lvalue_reference_t

全部标签

c++ - 为什么 `std::reference_wrapper` 秒内不能推导出模板实例?

假设我有一些T类型的对象,我想把它放到一个引用包装器中:inta=5,b=7;std::reference_wrapperp(a),q(b);//or"autop=std::ref(a)"现在我可以轻松地说if(p,因为引用包装器具有到其包装类型的转换。一切都很好,我可以像处理原始对象一样处理引用包装器的集合。(正如questionlinkedbelow所示,这可能是生成现有集合的替代View的有用方法,可以随意重新排列而不产生完整拷贝的成本,以及维护更新与原始集合的完整性。)但是,对于某些类,这不起作用:std::strings1="hello",s2="world";std::re

c++ - 为什么 `std::reference_wrapper` 秒内不能推导出模板实例?

假设我有一些T类型的对象,我想把它放到一个引用包装器中:inta=5,b=7;std::reference_wrapperp(a),q(b);//or"autop=std::ref(a)"现在我可以轻松地说if(p,因为引用包装器具有到其包装类型的转换。一切都很好,我可以像处理原始对象一样处理引用包装器的集合。(正如questionlinkedbelow所示,这可能是生成现有集合的替代View的有用方法,可以随意重新排列而不产生完整拷贝的成本,以及维护更新与原始集合的完整性。)但是,对于某些类,这不起作用:std::strings1="hello",s2="world";std::re

c++ - Gtest : Undefined References

我正在尝试使用GoogleTest测试一个简单的函数,但是当我在构建文件夹中运行make时,编译器会向我抛出UndefinedReference错误消息。我已经引用了gtest头文件,所以我不确定出了什么问题。有任何想法吗?我对unix和unittesting的整个主题都是新手,所以我很可能会遗漏一些简单的东西。提前致谢!错误信息:CMakeFiles/Proj2.dir/main.cpp.o:Infunction`main':main.cpp:(.text+0x1e):undefinedreferenceto`testing::InitGoogleTest(int*,char**)'

c++ - Gtest : Undefined References

我正在尝试使用GoogleTest测试一个简单的函数,但是当我在构建文件夹中运行make时,编译器会向我抛出UndefinedReference错误消息。我已经引用了gtest头文件,所以我不确定出了什么问题。有任何想法吗?我对unix和unittesting的整个主题都是新手,所以我很可能会遗漏一些简单的东西。提前致谢!错误信息:CMakeFiles/Proj2.dir/main.cpp.o:Infunction`main':main.cpp:(.text+0x1e):undefinedreferenceto`testing::InitGoogleTest(int*,char**)'

c++ - 重载运算符 [] 并没有得到 "lvalue required as left operand of assignment"错误

这与所有“需要左值作为赋值的左操作数”错误问题有点相反。我有一个重载运算符[]的类,但只有返回临时的版本。如果要返回一个int:structFoo{intoperator[](intidx)const{returnint(0);}};Foof;f[1]=5;我会理所当然地得到左值编译器错误。但是,如果它返回一个结构类型,编译器(在这种情况下是GCC7.2)根本不会提示:structBar{};structFoo{Baroperator[](intidx)const{returnBar();}};Foof;f[1]=Bar();如果Bar是临时的并且没有专门的运算符=,为什么不会以同样的

c++ - 重载运算符 [] 并没有得到 "lvalue required as left operand of assignment"错误

这与所有“需要左值作为赋值的左操作数”错误问题有点相反。我有一个重载运算符[]的类,但只有返回临时的版本。如果要返回一个int:structFoo{intoperator[](intidx)const{returnint(0);}};Foof;f[1]=5;我会理所当然地得到左值编译器错误。但是,如果它返回一个结构类型,编译器(在这种情况下是GCC7.2)根本不会提示:structBar{};structFoo{Baroperator[](intidx)const{returnBar();}};Foof;f[1]=Bar();如果Bar是临时的并且没有专门的运算符=,为什么不会以同样的

c++ - 使用空大括号初始化程序 : pointer or reference? 的重载分辨率

这个问题在这里已经有了答案:Overloadresolution:assignmentofemptybraces(2个回答)关闭5年前。当我发现下面的代码输出“指针”时,我遇到了一个真实的WTF时刻。#include#includetemplatestructbla{staticvoidf(constT*){std::cout>::f({});}更改std::pairint的模板参数或任何其他原始类型,给出(至少对我而言)预期的“模棱两可的重载”错误。似乎内置类型在这里很特殊,因为任何用户定义的类型(聚合、非平凡、具有默认构造函数等)都会导致调用指针重载。我相信模板不是复制它的必要条件

c++ - 使用空大括号初始化程序 : pointer or reference? 的重载分辨率

这个问题在这里已经有了答案:Overloadresolution:assignmentofemptybraces(2个回答)关闭5年前。当我发现下面的代码输出“指针”时,我遇到了一个真实的WTF时刻。#include#includetemplatestructbla{staticvoidf(constT*){std::cout>::f({});}更改std::pairint的模板参数或任何其他原始类型,给出(至少对我而言)预期的“模棱两可的重载”错误。似乎内置类型在这里很特殊,因为任何用户定义的类型(聚合、非平凡、具有默认构造函数等)都会导致调用指针重载。我相信模板不是复制它的必要条件

C++ boost库shared_memory_object undefined reference 'shm_open'

我尝试在ubuntu11.04上编译以下代码:#include#includeintmain(){boost::interprocess::shared_memory_objectshdmem(boost::interprocess::open_or_create,"Highscore",boost::interprocess::read_write);shdmem.truncate(1024);std::cout只得到以下错误:/tmp/cc786obC.o:Infunction`boost::interprocess::shared_memory_object::priv_open

C++ boost库shared_memory_object undefined reference 'shm_open'

我尝试在ubuntu11.04上编译以下代码:#include#includeintmain(){boost::interprocess::shared_memory_objectshdmem(boost::interprocess::open_or_create,"Highscore",boost::interprocess::read_write);shdmem.truncate(1024);std::cout只得到以下错误:/tmp/cc786obC.o:Infunction`boost::interprocess::shared_memory_object::priv_open