草庐IT

c++ - C++14 中的 "constexpr"

因此,从C++14开始,constexpr在C++11中的限制已经消失,例如constexpr函数中有新的变量或循环.最新版本的GCC和Clang编译器已经支持它们。所以问题是...constexpr函数是在编译时计算的,而不是在执行期间计算的,只要作为参数传递给它的值是常量。所以我在下面编写的函数的结果应该在执行期间立即出现,对吗?但事实并非如此。我的问题是:为什么会这样?我对C++14的constexpr功能有错误的理解吗?谢谢。编辑:是的,我使用的是-OO,这就是它不起作用的原因。但是设置-O1或更高速度的优化可以解决问题,程序会按预期执行。谢谢大家的回答。#include#in

c++ - 为什么有 C++14/17 的网络库提案?

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestion尽管TCP/UDP/IP是常用的协议(protocol),但我不明白为什么他们希望它成为ISOC++标准的一部分。这些与语言的核心无关。数据结构是普遍需要的工具,因此STL是有意义的,但这些协议(protocol)在IMO中过于具体。

c++ - C++14 是否定义了按位运算符在 unsigned int 的填充位上的行为?

C++标准如果C++14实现包括unsignedint的底层字节中的填充位,标准是否指定是否不得对填充位执行按位操作?此外,C++14标准是否指定是否相等和关系运营商必须忽略填充位?指南如果在这方面缺乏规范,是否有某种就这些运算符在填充位上的预期行为达成共识?我在StackOverflow上发现了相互矛盾的答案。LightnessRacesinOrbit和ecatmur说按位运算符不适合算术,因为它们应用于所有位(包括填充位),而Christoph和BartekBanachewicz假设按位运算符处理整数的逻辑值并忽略填充。引用资料相关回答:关于paddingbits的存在(1,2,3

c++ - 我正在使用 c++14 还是我的代码使用结构无效?

我正在重新访问C++,并且一直在学习没有实际问题的教程。但是,我有一个关于structs的部分,它说在c++14中你可以同时使用non-staticinitialisation和统一初始化。根据:-However,inC++14,thisrestrictionwasliftedandbothcanbeused.Ifbothareprovided,theinitializerlist/uniforminitializationsyntaxtakesprecedence.Intheaboveexample,Trianglexwouldbeinitializedwithlengthandwi

c++ - 在 constexpr 函数体 c++14 中可以有非文字类型的定义变量吗?

我认为在C++14中,更多限制已从constexpr中移除。但是根据N37977.1.53-punct:conexpr函数的定义应满足以下约束:它不能是虚拟的它的返回类型应该是字面量类型;它的每个参数类型都应该是文字类型;它的函数体应该是=delete,=default,或者一个复合语句不包含:asm-definition,goto语句,try-block,或者非文字类型或静态或线程存储持续时间或没有初始化的变量的定义执行。我知道为什么静态的线程存储持续时间变量是不允许的,但我没有看到任何原因,为什么只允许定义文字类型的变量?或者我不明白标准。我不确定,但根据标准,即使是C++14也应

c++ - 是否有 C++11/14 替代 __attribute__((packed))

C++11引入了标准化属性语法的概念。我找不到所有受支持属性的列表。是否有C++11属性替代__attribute__((packed))?例如struct__attribute__((packed))Pack{uint8_tfield1;uint8_tfield2;}; 最佳答案 不幸的是,没有。标准当前定义的属性是:[[noreturn]];[[carries_dependency]];[[deprecated]]/[[deprecated(reason)]];其他一切都是实现定义的。

c++ - 像结构成员一样访问 C++14 lambda 捕获

据我所知,C++11/14不允许在定义lambda时就地定义新的返回类型。但是,似乎C++14lambda捕获表达式实质上创建了一个具有一个或多个“成员”和一个运算符()的匿名类型。那么,为什么编译器不允许从lambda的外部访问捕获的成员。我虚弱的头脑无法处理C++的复杂性,但对您来说,它听起来像是一种合理的语言扩展吗?这是一个例子。vectorwords={"Stack","Overflow"};autol=[w=words](){};//almostlikeaC#anonymoustypecout 最佳答案 现状这在将lamb

c++ - 无法理解 kern.osversion ‘14.5.0

在尝试查看系统上的gcc版本时,我收到以下消息gcc--versiongcc:warning:couldn’tunderstandkern.osversion‘14.5.0gcc(GCC)4.9.0Copyright(C)2014FreeSoftwareFoundation,Inc.Thisisfreesoftware;seethesourceforcopyingconditions.ThereisNOwarranty;notevenforMERCHANTABILITYorFITNESSFORAPARTICULARPURPOSEwhich-agcc/usr/local/bin/gcc/

c++ - 这个似乎链接 lambda 的 C++14 结构叫什么?

这是关于这个问题的后续问题:Lambda-Over-LambdainC++14,其中的答案解释了代码。它是关于创建另一个lambda的lambda,当被调用时,调用传递的lambda并将返回值传递给原始lambda,从而返回第二个lambda的新实例。该示例显示了如何以这种方式链接lambda。从原始问题复制:#includeautoterminal=[](autoterm)//---------+};};automain()->int{autohello=[](autos){fprintf(s,"Hello\n");returns;};autoworld=[](autos){fpri

c++ - 我可以在用于 C++11 客户端应用程序的库中使用 C++14 吗?

如果我正在构建一个库,我假设该库的某些“客户端”可能只使用C++11,那么我可以使用C++14来编译该库本身吗?与C++11相比是否存在API/ABI/链接兼容性问题?只要避免公共(public)API中的某些新功能,使用C++14实现和构建库是否安全?如果是这样,我必须避免什么?或者在最终软件项目中混合使用C++11和C++14本质上是不兼容的?顺便说一句,这是一个跨平台库,所以我需要在Linux、OSX和Windows上构建它。 最佳答案 IfI'mbuildingalibrarywhereIassumethatsome"cli