草庐IT

c++ - 启用 c++11 时 c++ 递归模板的奇怪行为

我试图理解我收到的一些递归C++模板代码,但遇到了一些奇怪的行为。出于某种原因,编译器似乎能够在编译时添加两个值,但必须在运行时进行左移。即便如此,只有当我尝试在启用c++11的情况下进行构建时才会出现问题。代码(我已经归结,你稍后会看到)定义了两对模板——一对名为shft和shft_aux和一对名为add和add_aux递归生成它们自己。顺便说一句,add模板不应该有用,它的唯一目的是演示问题,而不是生成实际的min值。如果我在没有命令行参数的情况下编译这段代码,它编译得很好。但是,如果我指定-std=c++11-stdlib=libc++,add_aux上的static_asser

c++ - 带状态的 C+11 策略模式

StrategyPattern的例子从书中,HeadFirstDesignPatterns,是用C++编写的[here].我正在练习根据EffectiveGoFPatternswithC++11andBoost将其转换为C++11样式如下所示。嘎嘎行为:structQuack{staticvoidquack(){std::cout飞行行为:structFlyWithWings{public:staticvoidfly(){std::coutDuck层次结构:classDuck{public:typedefstd::functionQUACK;typedefstd::functionFL

c++ - 这句话在 C++11 标准的第 §3.2/2 段中是什么意思?

该句子是段落§3.2/2的一部分:Avariablewhosenameappearsasapotentially-evaluatedexpressionisodr-usedunlessitisanobjectthatsatisfiestherequirementsforappearinginaconstantexpression(5.19)andthelvalue-to-rvalueconversion(4.1)isimmediatelyapplied.上面加粗的句子到底是什么意思?编辑:这个问题的答案被认为是重复的,没有说任何可以回答我的问题的内容。 最佳

C++ 11 线程,错误调用纯虚函数

这是我正在尝试编译的非常简单的C++11线程API代码#include#includeusingnamespacestd;voidthreadFunction(void){cout关于将其编译为g++thread1.cpp-pthread-std=c++11我收到以下错误纯虚方法调用在没有事件异常的情况下终止调用中止有什么问题吗,求大神帮忙请注意,我是在配备ARMA8处理器的BeagleboneBlack上编译的 最佳答案 这是libstdc++或Clang中的错误,具体取决于您询问的对象。如果您使用的是2013年10月之后发布的C

c++ - 在 C++11 中使用的前向声明

我试图在不包含头文件的情况下在另一个头文件中使用对象的类型别名。我的简化版代码是://A.h#includeusingVector=std::vector;====================================================//B.husingVector;//forwarddeclarationbutnotworking!(Vectorhasnotbeeddeclared)intfoo(Vector*);====================================================//B.cpp#include"A.h"v

c++ - 让 GCC 在 C++11 模式下在 FreeBSD 上工作

如何在FreeBSD10上获得基于GCC的C++11设置?似乎FreeBSD上最近的GCC版本附带的标准库被破坏了。我已经安装了端口gcc49然后尝试编译它:#includeintmain(){autostr=std::to_string(42);str=std::to_string(42ull);str=std::to_string(4.2);str.clear();return0;}这给了我一个错误:g++49-v-std=c++11foo.ccUsingbuilt-inspecs.COLLECT_GCC=g++49COLLECT_LTO_WRAPPER=/usr/local/li

c++11 将 std::tuple 解压到虚拟成员函数中

完整故事:我正在尝试构建一个看起来有点像这样的框架:#include#includeusingnamespacestd;//thisclassallowsusertocall"run"withoutanyargsclasssimulation_base{public:intrun(){execute_simulation_wrapped();};protected:virtualintexecute_simulation_wrapped();{return0;};}//thisclassfunnelssomestoredinputsintoasoon-to-be-overriddenm

c++ - 为什么我不能在 C++11 中使用 constexpr 指针作为模板参数?

请考虑以下代码:templatestructH{};structAA{inti;};intmain(){typedefintAA::*PI;constexprPIpi=&AA::i;Hh1;//OK//Hh2;//compileerror}我有成员指针pi指向AA::i。pi是一个constexpr变量。为什么我不能将它用作模板参数,即使直接使用&AA::i也可以? 最佳答案 因为这些是规则,至少在C++11中是这样;14.3.2/1仅允许“指向成员的指针,如5.3.1中所述”,它描述了&AA::i语法。这在latestdraft中

c++ - 将函数转发到 c++11 中的 lambda 表达式

对于C++11中的Packaged_Task实现我想实现我在下面的C++14代码中表达的内容。换句话说,我想转发到lambda表达式中。templatePackaged_Task(F&&f){Promisep;_future=p.get_future();autof_holder=[f=std::forward(f)]()mutable{returnstd::move(f);};///...我知道转移到lambda的解决方法(但不幸的是,这个解决方法需要一个默认的可构造对象,在我的例子中,对象通常是没有默认构造函数的lambda表达式) 最佳答案

c++ - 标准 C++11 是否保证传递给函数的临时对象会在函数结束后被销毁?

众所周知,标准C++11保证传递给函数的临时对象将在函数调用之前创建:DoesstandardC++11guaranteethattemporaryobjectpassedtoafunctionwillhavebeencreatedbeforefunctioncall?但是,标准C++11是否保证传递给函数的临时对象会在函数结束后(而不是之前)被销毁?C++编程语言标准工作草案2016-07-12:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4606.pdf§12.2Temporaryobjects§12.2/5Th