草庐IT

c++ - 什么时候应该使用 const_iterator 而不是 auto

下面是一个例子,我认为它说明了使用const_iterator比使用“constauto”更可取的情况。这是因为容器不提供cfind()函数。还有其他选择吗?或者应该使用“constauto”而忽略const的缺失?std::stringGetJobTitle(conststd::string&employee){usingEmployeeTitles=std::unordered_map;EmployeeTitlesemployees={{"Alice","Director"},{"Bob","Manager"},{"Charlie","Developer"}};//Option1.

c++ - 自动将 c++11 auto 关键字重写为派生类型

也许是个奇怪的问题,但是有没有可用的软件,给定一堆c++11代码,派生所有类型的自动类型变量并用这些派生类型重写代码?还有初始化列表?原因是我们想提供我们代码的向后兼容版本(非C++11),主要是为了与osx的可移植性。自动输入和初始化列表是我们最常使用的功能,因为它们使代码更具可读性,但手动删除它们是不行的。由于这实际上是编译器对自动类型化变量所做的,所以它似乎并不太牵强? 最佳答案 查看BOOST_AUTO和/或BOOST_TYPEOFhttp://www.boost.org/doc/libs/1_48_0/doc/html/t

c++ - 为什么 decltype 用于尾随返回类型?

考虑以下代码:templateautocalc(T1a,T2b){returna+b;}templateautocalc(T1a,T2b)->decltype(a+b){returna+b;}第二个代码有什么区别?您能否举例说明这会产生什么影响,或者它在这里会产生什么影响? 最佳答案 请注意,普通的auto返回类型仅适用于C++14,而带有decltype的尾随返回类型适用于C++11。当引用进入图片时,例如,差异就出现了。在这样的代码中:#includestructTest{int&data;autocalc1(){returnd

c++ - Visual Studio 与 G++ 中的 Decltype 和友元函数

我正在编写一些C++代码来进行vector数学运算。它只是一个围绕std::array实例的薄包装器。我想重载非成员begin()函数以将迭代器返回到支持数组的开头。为此,我编写了一个简单的友元函数,它具有一个auto返回类型和一个使用decltype的尾随返回类型,它只是将调用转发给成员变量。它不会编译,我不明白为什么。我开始摆弄一个较小的示例,发现以下代码可以在G++4.7下编译,但不能在最新的VisualStudio2012Professional下编译。#include#includetemplateclassMyClass{private:std::arrayelts;pub

c++ - 对于带有自动参数的 lambda,是否有 std::function 类型或类似类型?

当我将lambda分配给显式类型的变量时(例如,当它是递归的,以捕获函数本身时),我使用std::function。以这个愚蠢的“位计数”函数为例:std::functionf;f=[&f](intx){returnx?f(x/2)+1:0;};当我们使用自动参数泛化x时,如C++14泛型lambda中引入的那样,情况会怎样?std::functionf;f=[&f](autox){returnx?f(x/2)+1:0;};显然,我不能将auto放在function类型参数中。是否有可能定义一个足够通用的仿函数类来涵盖上面的确切情况,但仍然使用lambda来定义函数?(不要过度概括这一

c++ - auto stdMaxInt = std::max<int> 的类型推导失败;

使用GCC4.8.4和g++--std=c++11main.cpp输出以下errorerror:unabletodeduce‘auto’from‘max’autostdMaxInt=std::max;对于这段代码#includetemplateconstT&myMax(constT&a,constT&b){return(a;myMaxInt(1,2);autostdMaxInt=std::max;stdMaxInt(1,2);}为什么它适用于myMax但不适用于std::max?我们可以让它与std::max一起工作吗? 最佳答案

c++ - constexpr if with initializer 由标准保证吗? 'constexpr(constexpr auto x = f(); x) { }'

我找不到任何关于新C++17if初始化语法的信息和“constexprif”在:http://open-std.org/JTC1/SC22/WG21/docs/papers/2016/p0128r1.html不过,Clang-HEAD支持该语法...constexprautof(){returntrue;}intmain(){ifconstexpr(constexprautox=f();x){}}在线代码在这里->http://melpon.org/wandbox/permlink/dj3a9ChvjhlNc8nr是constexprif带有标准保证的初始值设定项,如constexpr

c++ - 错误 : ‘template<class> class std::auto_ptr’ is deprecated

我正在使用scons和ubuntu。当我使用'scons'制作一些程序时,会发生错误,例如,src/db/DBTextLoader.cc:296:3:error:‘templateclassstd::auto_ptr’isdeprecated[-Werror=deprecated-declarations]/usr/include/c++/5/bits/unique_ptr.h:49:28:note:declaredheretemplateclassauto_ptr;这是我的命令;$./configuer$sourcesomething.sh$scons其实我也不知道。我已经在搜索这个

c++ - 如何在执行期间终止(或返回)具有结构类型的自动函数?

如何在执行期间终止具有结构返回类型的“自动”类型函数?当满足以下条件时,我想转义自动函数“Func”(不是整个程序):#include"stdafx.h"#include#include#includeusingnamespacestd;autoFunc(intB,vectorA){for(inta=0;aA;intB;};returnresult{A,B};}int_tmain(intargc,_TCHAR*argv[]){vectorA;intB=5;autoresult=Func(B,A);A=result.A;B=result.B;for(inta=0;a我不想使用“exit(

c++ - 在通用 lambda 中使用模板参数

GCC允许以下语法作为扩展://afunctionalobjectthatwilladdtwolike-typeobjectsautoadd=[](Ta,Tb){returna+b;};在n3418,2012年通用lambda提案,我们看到允许上述内容的语法:overload([](T*p){...},但是,由于它是一个扩展,所以语法显然不存在(或不允许)。当我们使用auto时,上述语法在什么情况下有用,为什么不存在(或不允许)语法? 最佳答案 在我看来,C++14的多态lambda更简洁。您可以像下面这样重现示例情况的效果:str