草庐IT

c++ - 当不涉及复制/移动时,在 C++11/14 中按值返回局部变量会导致返回值由右值构造吗?

我知道在以下情况下,编译器可以自由地移动-构造makeA的返回值(但也可以自由地省略拷贝或完全移动):structA{A(A&);A(A&&);};AmakeA(){AlocalA;returnlocalA;}我想知道的是,如果编译器在返回声明。也就是说,在下面的例子中,是否允许编译器选择A的构造函数4作为返回值?structB{};structA{A(A&);//(1)A(A&&);//(2)A(B&);//(3)A(B&&);//(4)};AmakeA(){BlocalB;returnlocalB;}我问这个是因为在我看来,允许A类型的本地对象在return语句中被视为右值的相同逻

c++ - 用户定义的文字中是否允许使用 C++14 位分隔符?

当clang编译以下行时,g++6.1提示数字分隔符(参见liveexampleonColiru):autotime=01'23s;根据C++14标准(N3796),哪个编译器(如果有)是正确的?否则,允许数字分隔符(第2.14.2节)只是的用户定义文字(第2.14.8节)中的实现细节图书馆(第20.12.5.8节)?恕我直言,不应该,因为这些文字是在unsignedlonglong上定义的。参数。我记得HowardHinnant使用10'000s以他的CppCon2016talk"Atutorial"期间为例(在他的演讲中大约42分钟)。(请注意,我不打算编码“1分23秒”,这只是偶

c++ - 为什么 C++11 或 C++14 中没有位置迭代器?

C++98有front_inserter、back_inserter和inserter,但似乎没有这些的任何emplacement版本C++11或草案C++14。我们不能拥有front_emplacer、back_emplacer和emplacer是否有任何技术原因? 最佳答案 Isthereanytechnicalreasonwecouldn'thavefront_emplacer,back_emplacer,andemplacer?不,没有技术原因。作为证明,这里是back_emplacer的完整实现,并带有您的用例1的演示..

c++ - 在 C++14 中,在新表达式的维度中使用 double 值是否有效?

在C++14中给出以下代码:voidfoo(){doubled=5.0;autop1=newint[d];}clang在没有诊断的情况下编译它,而gcc产生以下诊断(seeitliveingodbolt):error:expressioninnew-declaratormusthaveintegralorenumerationtype7|autop1=newint[d];|^我特别标记了这个C++14,因为在C++11模式下,clang将其视为格式错误并产生以下诊断(seeitliveingodbolt):error:arraysizeexpressionmusthaveintegra

c++ - C++14 中的递归 lambda 函数

在C++11中编写递归lambda函数有一个经常重复的“技巧”,如下所示:std::functionfactorial;factorial=[&factorial](intn){returnn(例如RecursivelambdafunctionsinC++0x。)这种技术有两个直接的缺点:std::function的目标对象(通过引用捕获)绑定(bind)到一个非常特殊的std::function对象(此处为factorial)。这意味着生成的仿函数通常不能从函数返回,否则引用将悬空。另一个(虽然不那么直接)的问题是使用std::function通常会阻止编译器优化,这是其实现中需要类

c++ - C++11 和 C++14 中 `bsearch` 的规范是否有缺陷?

继续我对thisquestion的回答,在C++11和C++14中:[C++11,C++14:25.5/2]:ThecontentsarethesameastheStandardClibraryheaderwiththefollowingexceptions:[C++11,C++14:25.5/3]:Thefunctionsignature:bsearch(constvoid*,constvoid*,size_t,size_t,int(*)(constvoid*,constvoid*));isreplacedbythetwodeclarations:extern"C"void*bsea

在 Ubuntu 14.04 中安装 MongoDB 失败

我按照MongoDB官方网站中提到的步骤进行操作。sudoapt-keyadv--keyserverhkp://keyserver.ubuntu.com:80--recv7F0CEB10echo"debhttp://repo.mongodb.org/apt/ubuntu"$(lsb_release-sc)"/mongodb-org/3.0multiverse"|sudotee/etc/apt/sources.list.d/mongodb-org-3.0.listsudoapt-getupdatesudoapt-getinstall-ymongodb-org运行最后一个命令我得到一个错误

在 Ubuntu 14.04 中安装 MongoDB 失败

我按照MongoDB官方网站中提到的步骤进行操作。sudoapt-keyadv--keyserverhkp://keyserver.ubuntu.com:80--recv7F0CEB10echo"debhttp://repo.mongodb.org/apt/ubuntu"$(lsb_release-sc)"/mongodb-org/3.0multiverse"|sudotee/etc/apt/sources.list.d/mongodb-org-3.0.listsudoapt-getupdatesudoapt-getinstall-ymongodb-org运行最后一个命令我得到一个错误

C++14 变量模板 : what is their purpose? 有任何用法示例吗?

C++14将允许创建模板化的变量。通常的例子是一个变量“pi”,可以读取它以获得各种类型的数学常数π的值(int为3;与float最接近的值等)除了我们可以通过在模板结构或类中包装变量来获得此功能之外,这如何与类型转换混合使用?我看到一些重叠。除了pi示例之外,它如何与非const变量一起使用?是否有任何使用示例来了解如何充分利用此类功能及其用途? 最佳答案 Andotherthanthepiexample,howwoulditworkwithnon-constvariables?目前,它似乎为类型单独实例化变量。即,您可以将10分

c++ - 为什么在 C++14 中使用 std::bind 而不是 lambda?

在C++11之前,我经常使用boost::bind或boost::lambda。bind部分进入标准库(std::bind),另一部分成为核心语言的一部分(C++lambdas)并大量使用lambdas更轻松。现在,我几乎不使用std::bind,因为我几乎可以用C++lambda做任何事情。我能想到std::bind的一个有效用例:structfoo{templatevoidoperator()(Aa,Bb){cout对应的C++14是autof=[](autoa,autob){cout更短更简洁。(在C++11中,由于auto参数,这还不起作用。)std::bind是否有任何其他有