草庐IT

c++ - 对临时对象成员的 const 引用

这个问题在这里已经有了答案:Aboutbindingaconstreferencetoasub-objectofatemporary(3个回答)关闭6年前。常量引用延长函数返回的临时对象的生命周期是C++的knownfeature,但是对函数返回的临时对象的成员使用常量引用是否可以接受?示例:#includestd::pairgetPair(intn){return{std::to_string(n),n};}intmain(int,char*[]){constintx=123456;constauto&str=getPair(x).first;printf("%d=%s\n",x,s

c++ - std::function 可以从右值引用移动构造到临时仿函数对象吗?

我有一个未模板化的仿函数对象,我试图将它作为std::function存储在另一个对象中。这个对象真的很重量级,所以它被标记为不可复制,但它确实有一个移动构造函数。但是,尝试从临时构造函数构造或分配std::function会失败。这是一个引发错误的最小示例。//pretendthisisareallyheavyweightfunctorthatcan'tbecopied.structExampleTest{intx;intoperator()(void)const{returnx*2;}ExampleTest():x(0){}ExampleTest(inta):x(a){}//all

c++ - std::function 可以从右值引用移动构造到临时仿函数对象吗?

我有一个未模板化的仿函数对象,我试图将它作为std::function存储在另一个对象中。这个对象真的很重量级,所以它被标记为不可复制,但它确实有一个移动构造函数。但是,尝试从临时构造函数构造或分配std::function会失败。这是一个引发错误的最小示例。//pretendthisisareallyheavyweightfunctorthatcan'tbecopied.structExampleTest{intx;intoperator()(void)const{returnx*2;}ExampleTest():x(0){}ExampleTest(inta):x(a){}//all

c++ - 在 Windows 中获取用户临时文件夹路径

如何在C++中获取用户的临时文件夹路径?我的程序必须在WindowsVista和XP上运行,并且它们有不同的临时路径。我怎样才能在不失去兼容性的情况下获得它? 最佳答案 您是否有不能使用Win32GetTempPathAPI的原因?http://msdn.microsoft.com/en-us/library/aa364992(VS.85).aspx此API从W2K开始可用,因此可用于您列出的所有目标。 关于c++-在Windows中获取用户临时文件夹路径,我们在StackOverflo

c++ - 在 Windows 中获取用户临时文件夹路径

如何在C++中获取用户的临时文件夹路径?我的程序必须在WindowsVista和XP上运行,并且它们有不同的临时路径。我怎样才能在不失去兼容性的情况下获得它? 最佳答案 您是否有不能使用Win32GetTempPathAPI的原因?http://msdn.microsoft.com/en-us/library/aa364992(VS.85).aspx此API从W2K开始可用,因此可用于您列出的所有目标。 关于c++-在Windows中获取用户临时文件夹路径,我们在StackOverflo

c++ - 在 C++11 中,如何获取没有名称的临时左值?

我有一个传统的C库和一个函数(setsockopts)需要一个指针参数。在C++11(gcc4.8)中,我可以在不初始化命名变量的情况下传递此参数吗?我有以下不满意的解决方案:#include#includeintderef(intconst*p){return*p;}usingnamespacestd;intmain(){intarg=0;cout(newint(42))) 最佳答案 如果这真的很麻烦(未测试),我会为setsockopt创建一个包装器templateintsetsockopt(intsocket,intlevel

c++ - 在 C++11 中,如何获取没有名称的临时左值?

我有一个传统的C库和一个函数(setsockopts)需要一个指针参数。在C++11(gcc4.8)中,我可以在不初始化命名变量的情况下传递此参数吗?我有以下不满意的解决方案:#include#includeintderef(intconst*p){return*p;}usingnamespacestd;intmain(){intarg=0;cout(newint(42))) 最佳答案 如果这真的很麻烦(未测试),我会为setsockopt创建一个包装器templateintsetsockopt(intsocket,intlevel

c++ - 优化 i++ as++i 避免临时变量有意义吗?

有人说我会写for(iteratorit=somecontainer.begin();it!=somecontainer.end();++it)而不是for(iteratorit=somecontainer.begin();it!=somecontainer.end();it++)...因为后者具有额外未使用的临时变量的成本。这种优化对现代编译器有用吗?写代码的时候需要考虑这个优化吗? 最佳答案 这是一个好习惯,因为迭代器可能非常复杂。对于vector::iterator或int索引,不,不会有什么不同。编译器永远无法消除(省略)拷

c++ - 优化 i++ as++i 避免临时变量有意义吗?

有人说我会写for(iteratorit=somecontainer.begin();it!=somecontainer.end();++it)而不是for(iteratorit=somecontainer.begin();it!=somecontainer.end();it++)...因为后者具有额外未使用的临时变量的成本。这种优化对现代编译器有用吗?写代码的时候需要考虑这个优化吗? 最佳答案 这是一个好习惯,因为迭代器可能非常复杂。对于vector::iterator或int索引,不,不会有什么不同。编译器永远无法消除(省略)拷

c++ - 我是否正确地说 const_cast 然后修改绑定(bind)到临时的 ref-to-const 可以吗?

我想检查一下我对此事的理解和结论。在IRC上,有人问:Isitacceptabletoconst_castaconstreferencethat'sboundtoatemporaryobject?翻译:他有一个ref-to-const绑定(bind)到一个临时的,他想抛弃它的const-ness来修改它。我的回答是我问过asimilarquestion以前,共识似乎是临时对象本身并不是天生的const,因此您可以摆脱对它们的引用的const特征,并且通过结果修改它们。而且,只要原来的ref-to-const仍然存在,就不会影响临时对象的生命周期。即:intmain(){constint