草庐IT

is_constexpr_copiable

全部标签

c++ - 转发声明一个 constexpr 变量模板

我尝试像这样转发声明一个constexpr变量模板:templateconstexprstd::size_titerator_category_value;目标是记录每个特化都应该是constexpr但我不得不承认我从未检查过它是否合法并且g++对此很满意。然而,当我尝试用clang++编译这个spinnet时,我得到了以下错误:error:defaultinitializationofanobjectofconsttype'conststd::size_t'(aka'constunsignedlong')constexprstd::size_titerator_category_va

c++ - 据我所知,下面的函数不是 constexpr,而是用 clang 和 g++ 编译的代码。我错过了什么?

我从N4140的§5.19/2中得到这个例子:constexprintincr(int&n){return++n;}据我所知,这不是一个constexpr函数。但是这段代码是用clang和g++编译的。参见liveexample.我在这里缺少什么? 最佳答案 在C++14中,constexpr函数的规则放宽了,论文N3597:Relaxingconstraintsonconstexprfunctions.该论文探讨了基本原理和效果,包括以下内容(强调我的):AsinC++11,theconstexprkeywordisusedtom

c++ - <type_traits> 的 is_function_pointer<>

中有这些:is_pointeris_functionis_member_function_pointer但不是这个:is_function_pointer为什么会这样? 最佳答案 [meta.unary.cat]中的特征旨在将每种类型归为一个类别。是void、integral、pointer等等。在这个层面上,pointer-to-function和pointer-to-int没有区别。并注意指向成员的指针不是指针。只不过是英文的谐音而已。它的目的是每个类型都返回true到[meta.unary.cat]中的一个特征。在这种分类中,

C++11 快速 constexpr 整数幂

在这里打死马。在C中进行整数幂运算的典型(且快速)方法是这种经典方法:int64_tipow(int64_tbase,intexp){int64_tresult=1;while(exp){if(exp&1)result*=base;exp>>=1;base*=base;}returnresult;}但是我需要一个编译时整数幂,所以我继续使用constexpr进行递归实现:constexprint64_tipow_(intbase,intexp){returnexp>1?ipow_(base,(exp>>1)+(exp&1))*ipow_(base,exp>>1):base;}const

c++ - 如果为 false,则 std::is_member_function_pointer 不编译

我在寻找什么:我有一个模板化类,如果该类具有所需的函数,我想调用一个函数,例如:templatedo_something(){ifconstexpr(std::is_member_function_pointer::value){this->_t->x();//_tistypeofT*}}会发生什么:如果T没有带来函数,编译器就不会编译。小例子:#include#includeclassFoo{public:voidx(){}};classBar{};intmain(){std::cout::value::value编译器说:is_member_function_pointer.cpp

c++ - 为什么 constexpr 不是所有函数的默认值?

这个问题在这里已经有了答案:Whydoweneedtomarkfunctionsasconstexpr?(4个答案)关闭6年前。放宽constexpr的规则后,这些函数似乎可以在任何地方使用。它们也可以在常量(constexpr)和局部(可变)变量上调用。所以对我来说,这似乎只是对编译器的提示(如内联)。我只是到处写它,如果编译器提示就删除它。所以编译器似乎知道一个函数是否可以在编译时求值的一切。为什么这不是默认行为,为什么我必须将任何内容标记为constexpr?

c++ - 对于函数 : constexpr const or enum? 中的常量,我应该更喜欢哪个

我习惯用enum{my_const=123;来定义常量},因为在类中,使用staticconstexpr需要类定义之外的一些代码(参见thisquestion)。但是-在函数体中呢?最近我一直注意到人们只是在他们的函数中使用constexpr变量(实际上甚至不屑于const它们),我想知道我是否是一个落后的傻瓜我的时代intfoo(intx){enum:int{bar=456};returnx+bar;}所以,我的问题是:在函数体内使用枚举而不是constexpr变量有什么好处吗? 最佳答案 如果bar是constexprintba

C++11 constexpr 过时的模板元编程?

据我了解,constexpr与模板元编程不同,它不是图灵完备的,所以我相信它们是不一样的。所以问题是constexpr在多大程度上使模板元编程过时了? 最佳答案 constexpr绝对是图灵完备的。允许递归。它是定义在编译时和运行时工作的函数的便捷方式。constexpr函数只是函数,不能对类型执行操作。(当然,除非您使用模板元编程来定义所述函数。)类模板和constexpr都可以用来包含编译时常量表达式,但相似之处仅此而已。它们不是多余的,TMP不会很快消失。不过,一些特别丑陋的编译时计算可能会更优雅地重写为适当的函数。

c++ - constexpr 和初始化

也许已经有人问过类似的问题,当然,这是一个吹毛求疵...我有一堆常量std::map用于在enum(class)值和它们的std::string表示之间切换(双向)。这里有人向我指出,这些映射将在运行时初始化,当其他初始化代码运行时,在我的程序执行所有好东西之前。这意味着常量表达式会影响运行时性能,因为映射是根据它们的枚举字符串对构建的。作为说明性示例,这里是其中一张map的示例:enumclassos{Windows,Linux,MacOSX};constmapos_map={{"windows",os::Windows},{"linux",os::Linux},{"mac",os:

解决WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python

目录解决WARNING:pipisconfiguredwithlocationsthatrequireTLS/SSL,howeverthesslmoduleinPython不可用的问题问题描述解决方案1.检查Python环境2.安装所需的依赖对于Debian/Ubuntu系统:对于Fedora/CentOS系统:对于MacOS系统:对于Windows系统:3.重新安装Python环境4.使用另一个包管理器结论示例代码示例说明SSL模块介绍SSL模块的使用场景SSL模块的基本用法解决WARNING:pipisconfiguredwithlocationsthatrequireTLS/SSL,ho