草庐IT

C++11:传递值参数初始化中转换构造函数和转换函数之间的歧义?

#includeusingnamespacestd;structY;structX{X(constY&){cout在上面,转换函数被我的编译器(gcc4.6.1)赋予了转换构造函数的优先权,但是在标准中它声明:User-definedconversionsareappliedonlywheretheyareunambiguous在这种情况下似乎存在歧义。谁能解释一下矛盾?我原以为上面的代码不会编译。我也很确定几年前ScottMeyers写了关于这个特定示例的文章,并说它无法编译。我错过了什么? 最佳答案 因为X构造函数需要一个con

c++ - 如何获取 lambda 的返回类型,C++11 中的 reduce 函数

我正在尝试实现一个reduce函数,但我不知道如何获取lambda的返回类型:templateautoreducef(constIT&input,Ffunc)->decltype(func(IT::value_type)){decltype(func(typenameIT::value_type))result={};returnstd::accumulate(input.begin(),input.end(),result,func);}编译器输出如下:test.cpp:Infunction‘intmain(int,char**)’:test.cpp:37:80:error:noma

c++ - 在 VS2012 中使用 C++11 条件变量

我无法让代码在一个简单的VS2012控制台应用程序中可靠地工作,该应用程序由使用C++11条件变量的生产者和消费者组成。我的目标是生成一个可靠的小程序(用作更复杂程序的基础),该程序使用3个参数wait_for方法,或者可能是我在这些网站上收集的代码中的wait_until方法:condition_variable:wait_for,wait_until我想将3个参数wait_for与如下所示的谓词一起使用,除非它需要使用类成员变量以便稍后对我最有用。运行大约一分钟后,我收到“访问冲突写入位置0x__”或“将无效参数传递给服务或函数”作为错误。steady_clock和第二个参数wai

C++11 Dynamic Cast If Else Chain -> 开关

考虑以下几点:structB{};templatestructD:B{Tt;}voidg(inti){...}voidg(strings){...}voidg(charc){...}voidf(B*b){if(dynamic_cast*>(b)){g(dynamic_cast*>(b)->t);}elseif(dynamic_cast*>(b)){g(dynamic_cast*>(b)->t);}elseif(dynamic_cast*>(b)){g(dynamic_cast*>(c)->t)}elsethrowerror;};这里只有三种可能的T类型——int、string、char

c++ - C++11中函数参数的显式模板函数参数规范和隐式转换

题目很长很晦涩,但是问题很简单。我正在阅读最新的C++11规范草案(N3242=11-0012)第375页中的14.8.1显式模板参数规范6Implicitconversions(Clause4)willbeperformedonafunctionargumenttoconvertittothetypeofthecorrespondingfunctionparameteriftheparametertypecontainsnotemplate-parametersthatparticipateintemplateargumentdeduction.[Note:Templateparam

C++ 11:普通字符串文字和UTF-8字符串文字之间的区别示例?

Astringliteralthatdoesnotbeginwithanencoding-prefixisanordinarystringliteral,andisinitializedwiththegivencharacters.Astringliteralthatbeginswithu8,suchasu8"asdf",isaUTF-8stringliteralandisinitializedwiththegivencharactersasencodedinUTF-8.我不明白普通字符串文字和UTF-8字符串文字之间的区别。有人可以提供他们不同的情况的例子吗?(导致不同的编译器输出)

c++ - 如何在 C++11 中测试 lambda

通常,要测试指针是否指向函数,请使用std::is_function就够了。但是,它不能与lambda一起使用。由于lambda是operator()的对象.现在我必须同时使用is_function和is_object检查一个是否像函数一样工作,如下所示:std::is_function::value||std::is_object::value所以我想知道是否有更好的方法来测试是否是lambda?编辑:相关代码:templatevoiddeferJob(Funcf,intms=2000){if(!std::is_function::value&&!std::is_object::va

c++ - C++11 中 lambda 的内存管理

有人可以描述为什么这段代码不起作用(在从调用返回之前在GCC4.7.3上出现段错误)吗?#include#include#includeusingnamespacestd;templateautomemo(constF&x)->std::function{typedefdecltype(x())return_type;typedefstd::functionthunk_type;std::shared_ptrthunk_ptr=std::make_shared();*thunk_ptr=[thunk_ptr,&x](){cerr我最初的假设:每个std::function是对表示闭包的

c++11:从模板函数构建 std::tuple

我有以下功能:templateTCheck(intindex);我如何编写函数CheckTuple,它在给定元组类型的情况下通过调用Check来填充元组?p>例如:CheckTuple>()将返回以下元组:std::make_tuple(Check(1),Check(2),Check(3))我看到的其他问题涉及解包一个给定的元组,而不是用这种方式构建一个元组。 最佳答案 使用C++14的integer_sequence实现您正在寻找的东西变得非常简单.如果您没有可用的,here'saC++11implementation由Jonat

c++11 注册缓存线程安全

在volatile:TheMultithreadedProgrammer'sBestFriend,AndreiAlexandrescu给出了这个例子:classGadget{public:voidWait(){while(!flag_){Sleep(1000);//sleepsfor1000milliseconds}}voidWakeup(){flag_=true;}...private:boolflag_;};他说,...thecompilerconcludesthatitcancacheflag_inaregister...itharmscorrectness:afteryouca