草庐IT

c++ - 在 C++ 11 中将指针传递给临时变量?

我有一个现有的功能:voidfoo(constKey*key=nullptr){//usesthekey}我想将它的指针传递给临时Key对象(即右值),例如:foo(&Key());这会导致编译错误,但在C++11/14中有什么方法可以做到这一点吗?我当然可以:Keykey;foo(&key);但是我不需要objectKey,我只需要在foo()和foo()里面或者我可以这样做:foo(newKey());但是对象不会被删除。 最佳答案 我不认为这是个好主意,但如果你真的想要一个临时文件并且不能更改foo,你可以将临时文件转换为co

C++11 Lambda 表达式作为回调函数

是否有任何C++GUI工具包支持将回调函数定义为C++11lambda表达式?我相信这是使用C#(至少与C++相比)编写基于GUI的程序的独特优势。对于将lambda表达式作为参数的函数,我应该使用什么类型签名?这些函数如何支持隐式转换? 最佳答案 问题第二部分的答案:您可以使用std::function其中Signature=例如void(int)或者-如果lambda不采用闭包-旧的void(Foo*)(int)方法,因为没有闭包的lambda必须可以转换为正确的函数类型。因此,例如调用带有签名的方法:voidAddHandle

c++ - 什么会导致 D3D11CreateDevice() 因 E_FAIL 而失败?

我正在使用以下代码调用D3D11CreateDevice():ID3D11Device*md3dDevice;ID3D11DeviceContext*md3dImmediateContext;D3D_DRIVER_TYPEmd3dDriverType=D3D_DRIVER_TYPE_HARDWARE;createDeviceFlags=D3D11_CREATE_DEVICE_DEBUG;HRESULThr=D3D11CreateDevice(0,md3dDriverType,0,createDeviceFlags,0,0,D3D11_SDK_VERSION,&md3dDevice,&f

c++ - 非本地 C++11 lambda 是否存在于匿名 namespace 中?

GCC4.8的最新版本在头文件中提供了以下代码:autoL=[](){};structS{decltype(L)m;};以下警告:test.hpp:3:8:warning:'S'hasafield'S::m'whosetypeusestheanonymousnamespace[enabledbydefault]structS^为什么编译器会考虑使用匿名命名空间的lambda类型?我将lambda设为全局,我没有在任何地方使用匿名命名空间。更新:即使我将lambda放在显式命名空间中,编译也会给出相同的警告,如下所示:namespaceN{autoL=[](){};}structS{de

c++ - 如何告诉 scons 使用 C++11 标准

我没找到如何告诉scons接受c++11标准:SConstruct文件:env=Environment(CPPPATH='/usr/include/boost/',CPPDEFINES=[],LIBS=[],SCONS_CXX_STANDARD="c++11")env.Program('Hello',Glob('src/*.cpp'))cpp文件:#includeclassA{};intmain(){std::cout调用scons时的错误信息:scons:ReadingSConscriptfiles...scons:donereadingSConscriptfiles.scons:B

C++11 虚拟拷贝构造函数

我正在阅读MarkJoshi的C++设计模式和衍生产品定价,并在C++11中实现他的代码。一切都进行得很顺利,直到我看到他讨论虚拟拷贝构造函数的第4章。PayOffDoubleDigitalthePayOff(Low,Up);VanillaOptiontheOption(thePayOff,Expiry);这里的问题是VanillaOption包含对thePayOff的引用。如果是这种情况并且有人修改了thePayOff,则theOption的行为可能会被无意中修改。他建议的解决方案是在PayOffDoubleDigital的基类PayOff中创建一个虚拟拷贝构造函数,以便theOpt

C++11 unordered_map使用哈希实现,map是使用红黑树实现的

unordered_mapC++11引入了一套标准库中的哈希函数和哈希容器,用于提供高效的哈希功能。这些特性位于和头文件中。C++11中的哈希容器是基于散列表实现的,可以快速插入、查找和删除元素,并具有平均常数时间复杂度的操作。哈希容器包括std::unordered_map和std::unordered_set,分别对应无序映射(键-值对)和无序集合(唯一值)。使用哈希容器需要注意以下几点:包含头文件:在使用哈希容器之前,需要包含相应的头文件:#include#include哈希函数:为了支持自定义类型的哈希,需要提供

c++ - (右值引用)VS(const 左值引用)作为 C++11 中的函数参数

谁能解释一下当右值引用作为函数参数时优先于const左值引用的情况?背景:我试图将一个const指针传递给一个函数。由于我必须考虑传入局部指针和传入临时指针的情况(比如从函数调用返回),我有两种选择:参数可以声明为:voidfoo(Tconst*const&);//constlvaluereftoconstptr或voidfoo(Tconst*&&);//rvaluereftoconstptr但是这个右值引用不能绑定(bind)到局部变量(它是左值类型。但我确实记得ScottMeyers创造了术语“通用引用”来指代右值引用。这让我更加困惑。)所以我的问题是,由于第一个声明可以处理这两种

c++ - c++11 中首选的初始化方式

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。社区在去年审查了是否重新打开这个问题并让它关闭:原始关闭原因未解决Improvethisquestioninti=0;//(a)OldCstyleshouldIuseit?inti{0};//(b)Bracedirectinitinti{};//(c)Sameas(b)inti={0};//(d)as(b)inti={};//(e)as(c)autoi=0;//(f)auto=intinthiscase.autoi=int{0

c++ - 静态数组 VS。 C++11 中的动态数组

我知道这是一个非常古老的争论,已经在全世界讨论过很多次。但是我目前在决定在特定情况下应该使用哪种方法而不是静态和动态数组之间的另一种方法时遇到麻烦。实际上,我不会使用C++11,我会使用静态数组。但我现在很困惑,因为两者可能有相同的好处。第一种解决方案:templateclassFoo{private:intarray[N];public://Somefunctions}第二种方案:templateclassFoo{private:int*array;public://Somefunctions}我不能碰巧选择,因为两者各有优势:静态数组更快,我们根本不关心内存管理。只要没有分配内存,