c++17相关内容

C ++ 11、14、17或20是否为pi引入标准常数?

在C和C ++中,数字pi存在一个相当愚蠢的问题.据我了解,math.h中定义的M_PI并不是任何标准所要求的. 新的C ++标准在标准库中引入了许多复杂的数学运算-双曲函数,std::hermite和std::cyl_bessel_i,不同的随机数生成器等等. 任何“新"标准是否都为pi带来了常数?如果没有-为什么?没有它,所有这些复杂的数学如何工作? 我知道在C ++中有关p ..
发布时间:2020-04-27 04:22:28 C/C++开发

为什么在c ++ 17中不推荐使用std :: allocator的Construct和destroy函数?

c ++ 17规范弃用了std::allocator对象的construct和destroy成员.工作组在此处,在“弃用std :: allocator的冗余成员"标题下. 但是,他们没有具体提及为什么不赞成使用这两个成员,或者关于替换该功能的建议是什么.我假设其含义是使用std::allocator_traits::construct代替. 由于 由于此函数提供了自动回退到新放置的 ..
发布时间:2020-04-27 04:22:08 C/C++开发

P0522R0的中断代码如何?

今天,我正在阅读clang的C ++ 17支持页面.我注意到有些奇怪.功能将模板模板参数匹配到兼容参数( P0522R0 )被标记为部分,因为必须通过开关将其激活.他们的笔记说: 尽管是缺陷报告的解决方案,但是此功能在所有语言版本中均默认禁用,并且可以在Clang 4中通过标志-frelaxed-template-template-args明确启用.模板部分排序的相应更改,导致合理且先前有效 ..
发布时间:2020-04-27 04:21:51 C/C++开发

是否允许删除来修改其参数?

在一个答案中, https://stackoverflow.com/a/704568/8157187 ,引用了Stroustrup: C ++明确允许删除的实现将零 左值操作数,我曾希望实现能够做到这一点, 但是这个想法似乎并没有在实施者中流行. 但是,我未能在标准中找到此明确声明.当前标准草案(N4659)的一部分可以用这种方式解释: 6.7: 到达存储区域的持续时间结束 ..
发布时间:2020-04-27 04:21:47 C/C++开发

允许编译器优化掉局部volatile变量吗?

是否允许编译器对此进行优化(根据C ++ 17标准): int fn() { volatile int x = 0; return x; } 对此吗? int fn() { return 0; } 如果是,为什么?如果没有,为什么不呢? 这是关于此主题的一些思考:当前的编译器将fn()编译为放置在堆栈中的局部变量,然后将其返回.例如,在x86-64 ..
发布时间:2020-04-27 04:21:25 C/C++开发

指针互转换与具有相同地址

标准N4659的工作草案说: [基本化合物] 如果两个对象是指针可互换的,则它们具有相同的地址 然后注意 即使数组对象和其第一个元素具有相同的地址,它们也不能指针可相互转换 使数组对象及其第一个元素不可指针可互转换的原理是什么?更一般地,将指针可互换性的概念与具有相同地址的概念区分开的原理是什么?那里不存在矛盾吗? 在给定这种陈述顺序的情况下,看来 int a ..
发布时间:2020-04-27 04:21:02 C/C++开发

std :: ignore与结构化绑定?

前奏: std::tuple f(); std::tuple g(); C ++ 1z将为结构化绑定引入语法,这将使编写而不是编写成为可能 int a, b, c; std::tie(a, b, c) = f(); 类似 auto [a, b, c] = f(); 但是,std::tie还允许指 ..
发布时间:2020-04-27 04:20:08 C/C++开发

自C ++ 17起,具有正确地址和类型的指针仍然始终是有效的指针吗?

(参考在C ++ 17标准之前, [basic.compound]/3 : 如果类型T的对象位于地址A,则无论其值如何获得,都将以其值为地址A的cv T *类型的指针指向该对象. 但是从C ++ 17开始,此句子已已删除. 例如,我相信这句话使示例代码定义完整,并且自C ++ 17起,这是未定义的行为: alignas(int) unsigned char buffer[ ..
发布时间:2020-04-27 04:19:48 C/C++开发

我可以将C ++ 17不捕获lambda constexpr转换运算符的结果用作函数指针模板非类型参数吗?

回答我如何写一个看起来像方法的lambda表达式?,我试图利用以下事实将无捕获的lambda转换为成员函数指针:自C ++ 17起,无捕获的lambda具有 constexpr 将转换运算符转换为其函数指针类型. 所以我想到一个问题,直到: template struct A{}; int main() { A( ..
发布时间:2020-04-26 15:08:50 C/C++开发