草庐IT

if-constexpr

全部标签

c++ - 将代码转换为 constexpr

将代码转换为constexpr的一般技巧是什么?比如说,有一种算法可以对(输入)几何图形进行一些几何变换。输入和输出的性质和大小各不相同,并且彼此之间存在非平凡的依赖关系。目前它作为一个类实现,目前使用std::map和std::vector(不失一般性)。有什么方法可以重构代码,使用动态内存来获得符合常量表达式要求的代码?我可以想象constexpr兼容容器和constexpr兼容"stackallocator"实现的某种组合(用于足够大的存储)用于每个使用的容器value_type。但是有一个问题:我从来没有遇到过这样的容器。但也许还有其他方法? 最佳答

c++ - 每当使用 constexpr 指定调用的函数时,将委托(delegate)方法声明为 constexpr

请考虑以下类(class)templateclassfoo{public:autobar(){returnm_t.bar();}private:Tm_t;};如果我们想要foo::bar不抛出任何时候T::bar是非抛出的,我们可以将其声明更改为autobar()noexcept(noexcept(m_t.bar())){returnm_t.bar();}但如果我们想要,我们能做什么foo::bar用constexpr指定每当T::bar用constexpr指定?我们可以写吗constexprautobar()noexcept(noexcept(m_t.bar())){returnm_

c++ - 在 C++17 中,是否可以使用带有初始值设定项的 if 语句来解包可选?

我正在使用std::optional编写一些代码,我想知道C++17的“带有初始化器的if语句”是否能够帮助解包值?std::optionaloptionalInt=GetOptionalInt();我在这里编写函数Unpack:if(auto[value,has_value]=optionalInt.Unpack();has_value){//Usevaluehere.}但是,我的问题是。C++17“带有初始化程序的if语句”在这里有帮助吗?如果是这样,它将如何编码?更新,这实际上主要是使用optional时的一个问题,它非常容易被滥用,因为optional和*optional都返回

为什么这种constexpr函数不正确?

根据10.1.5[dcl.constexpr]第5段(N4659),对于既不默认也不是模板的constexpr函数或constexpr构造函数,如果不存在参数值因此,函数或构造函数的调用可能是核心常数表达式(8.20)的评估亚表达,或者,对于构造函数,对于某些对象(6.6.2)的恒定初始器(6.6.2),该程序是错误的,没有诊断式的诊断必需的。[例子:constexprintf(boolb){returnb?throw0:0;}//OKconstexprintf(){returnf(true);}//ill-formed,nodiagnosticrequired...-最终示例]我不确定为什么

c++ - 当类没有 constexpr 构造函数时简化冗余 std::array 初始化

我有以下代码的更复杂版本:#include#includeusingnamespacestd;classDummy{public:Dummy(constdoublea,constdoublef){//Somecomplexcalculations}};constexprdoublevalues[]{0.1,0.2,0.3,0.4};constexprautoN=sizeof(values)/sizeof(values[0]);staticconstarraydummies{Dummy(10*values[0],M_PI*0),Dummy(10*values[1],M_PI*1),Dum

c++ - 如何在没有警告的情况下在 gnu++11 标准中写入 "nested if...else statement for constants"?

当我使用嵌套的if....else语句时if(std::is_same::value){//dosomething}elseif(std::is_same::value){//dosomethingelse}...else{//printerror}我收到QACPP静态代码分析器的编译器警告qacpp-4.2.1-4090,其中包含消息“此‘if’语句中的条件是常量。”我该如何修复gnu++11标准中的编译器警告?注意:我不是C++专家,所以如果这个问题听起来很业余,请原谅。 最佳答案 对于T的特定实例,if条件是常量。换句话说st

c++ - 为什么我不能在类中另一个函数的声明中使用静态 constexpr 的结果?

这是我的准系统代码:#include#includeclasscColor{public:enumeValue{k_Red,k_Green,k_Blue};staticconstexprstd::size_tNumValues(){return3;}staticconstexprstd::arrayValues(){return{k_Red,k_Green,k_Blue};}};intmain(){std::cout我正在尝试将Values()声明为静态constexpr,我认为我应该能够使用NumValues(),因为它也是一个静态constexpr。然而,这个程序failstoco

c++ - 为什么 Foo::inner Constexpr 不会链接,而 User Literal{Foo::inner Constexpr} 会链接?

考虑以下简单类,这些类是我根据在实际项目中遇到的问题设计的。Triple是一种与内部一起使用的快速样板类型constexprFoo类中的s:#includeclassTriple{public:friendstd::ostream&operator如果我再写一个main()使用公共(public)内部函数constexpr来自Foo,如下,会链接失败(使用g++4.7.0,在Windows7上通过mingw-x86-64):intmain(intargc,char**argv){usingstd::cout;usingstd::endl;cout$g++-otest-O3--std=c

C++ count_if 函数 - 无法推断模板

我正在尝试使用C++的count_if函数来查看std::string中有多少个十六进制数字。当我尝试以下操作时:strings="123abc";cout我收到以下错误:count.cpp:14:13:error:nomatchingfunctionforcallto'count_if'cout但是,当我使用::isxdigit时,程序会编译并运行。我知道在::之前添加与在全局范围内使用isxdigit有关,但我不确定为什么它在这种情况下有帮助。我也认为它与C++语言环境有关,但我对它们不太熟悉。谢谢! 最佳答案 有一个函数int

c++ - if-cases 泄漏中定义的变量? (也就是为什么这甚至可以编译?)

似乎在if语句中声明的变量会泄漏到以下语句?我复制粘贴了一些代码,令我惊讶的是它在不应该编译的时候编译了!我正要提交代码,幸运的是我在那之前发现了错误。下面是一个显示问题的工作(?)程序。以下代码片段调用一个不存在的对象上的函数:#includeclassA{public:virtual~A(){}};classB:publicA{public:voidfooB(){std::cout(a)){b->fooB();}elseif(C*c=dynamic_cast(a)){c->fooC();b->fooB();}return0;}它编译并且输出是这样的:fooCfooB这肯定是错误的。