草庐IT

非 C++11 程序中的 C++11 代码/库

假设我将C++11中的代码(我将使用Lambdas)编译为“.o”或库“.a”。我有一个程序,其中我将包含以前的库和头文件,我不能用C++11编译,但是旧的(C++98)。它会编译并正常工作吗? 最佳答案 如果满足以下条件,它将正常工作:(公共(public))头文件不使用任何C++11特性ABI没有改变就此咨询您的平台/编译器没有共同的依赖关系发生变化根据VaughnCato链接的GCC文档,这包括标准库。任何在使用C++11编译时生成不同代码或对象布局并被库和客户端使用的东西都可能是一个问题……即使它没有在接口(interfac

C++11 在 Visual Studio 2012 中的委托(delegate)构造函数

我正在尝试在VisualStudio2012中使用委托(delegate)构造函数。以下代码在Xcode4.6中编译但在VisualStudio2012中不编译:在.h文件中classErrorReportDlg:publicQDialog{public:ErrorReportDlg(OwlExceptionPtrex,QWidget*parent);ErrorReportDlg(QWidget*parent);virtual~ErrorReportDlg();}在.cpp文件中//FWIW,OwlExceptionPtris//typdefboost::shared_ptrOwlEx

C++11 嵌套 std::conditional

这个表达式有什么问题吗?templateusingaddRefU=typenamestd::conditional::type,typenamestd::conditional::type,typenamestd::add_lvalue_reference::type>>::type;intmain(){std::cout>::value>::valuehttp://coliru.stacked-crooked.com/a/21593805f2c6e634因此,它根本没有引用。是否不允许嵌套std::conditional? 最佳答案

具有线程安全队列的 C++11 事件循环

我想创建一个事件循环类,它将在它自己的线程上运行,支持将任务添加为std::functions并执行它们。为此,我从这里使用SafeQueue:https://stackoverflow.com/a/16075550/1069662classEventLoop{public:typedefstd::functionTask;EventLoop(){stop=false;}voidadd_task(Taskt){queue.enqueue(t);}voidstart();voidstop(){stop=true;}private:SafeQueuequeue;boolstop;};voi

c++ - 将局部变量分类为 C++11 之前的谓词

以下代码在使用GCC和Clang以C++11模式构建时编译时没有错误/警告。但是,如果我尝试在没有C++11模式的情况下进行编译,并且在第二个范围内发生错误。#include#includestructastruct{intv;};structastruct_cmp0{booloperator()(constastruct&a0,constastruct&a1){returna0.valist;{//Works-noerrorsstd::stable_sort(alist.begin(),alist.end(),astruct_cmp0());}{structastruct_cmp1{

c++ - 如何在 MSVC 下检测 C++11 的 noexcept 特性?

我正在使用C++库。该库的最低要求是C++03。我在VisualStudio2015下发现了一些关于抛出析构函数的警告:...algparam.h(271):warningC4297:'AlgorithmParametersBase::~AlgorithmParametersBase':functionassumednottothrowanexceptionbutdoes...algparam.h(271):note:destructorordeallocatorhasa(possiblyimplicit)non-throwingexceptionspecificationthrow是

c++ - 使用 Qt::X11BypassWindowManagerHint 标志时窗口没有获得焦点

我需要创建窗口,它始终保持在顶部,没有边框和控件。所以我这样做了:MainWindowwindow;window.show();MainWindow类如下所示:MainWindow::MainWindow(QWidget*parent):QWidget(parent,Qt::Window|Qt::WindowStaysOnTopHint|Qt::X11BypassWindowManagerHint|Qt::FramelessWindowHint){}voidMainWindow::keyPressEvent(QKeyEvent*event){if(event->key()==Qt::K

C++11 自动/我不明白的东西

好的。这是我的代码:CShop::~CShop(){TPacketGCShoppack;pack.header=HEADER_GC_SHOP;pack.subheader=SHOP_SUBHEADER_GC_END;pack.size=sizeof(TPacketGCShop);Broadcast(&pack,sizeof(pack));GuestMapType::iteratorit;it=m_map_guest.begin();while(it!=m_map_guest.end()){LPCHARACTERch=it->first;ch->SetShop(NULL);++it;}M

c++ - std::bind 是否丢弃 C++11 中参数的类型信息?

问题发生案例请考虑以下C++代码:#include#include#include//SuperclassclassA{public:virtualstd::stringget()const{return"A";}};//SubclassclassB:publicA{public:virtualstd::stringget()const{return"B";}};//Simplefunctionthatprintstheobjecttypevoidprint(constA&instance){std::cout在这个例子中,我们有两个类A和B。B继承自类A。这两个类都实现了一个返回类型

c++ - 在 C++11 中从 C++17 重新实现 std::map::try_emplace()?

std::map::try_emplace()看起来非常方便和高效,但它仅在C++17中可用。是否可以在C++11中重新实现它?templatepairtry_emplace(constkey_type&k,Args&&...args); 最佳答案 对于有序映射,您可以使用lower_bound接近行为:templatestd::pairtry_emplace_m(M&m,consttypenameM::key_type&k,Args&&...args){autoit=m.lower_bound(k);if(it==m.end()|