草庐IT

if-constexpr

全部标签

c++ - 如果 constexpr 与 sfinae

随着ifconstexpr的引入在c++17,在c++14中使用编译时SFINAE解决的一些问题/c++11现在可以使用ifconstexpr解决,语法更简单。例如,考虑以下编译时递归的基本示例,以生成打印可变数量参数的子例程。#include#includetemplatevoidprint_sfinae(T&&x){std::coutstd::enable_if_t0)>print_sfinae(T0&&x,T&&...rest){std::cout(rest)...);}templatevoidprint_ifconstexpr(T0&&x,T&&...rest){ifconst

c++ - 为什么 std::bitset<5>{}[0] 不是 constexpr?

std::bitset有constexpr构造函数和constexproperator[]所以下面的代码编译成功:#includetypedefstd::bitsetBitSet;constexprBitSets1;static_assert(!s1[0]);购买为什么下面的代码没有?static_assert(BitSet{}[0]); 最佳答案 当您编写BitSet{}时,会创建一个类型为BitSet的临时对象。但是std::bitset的operator[]对于非常量对象,不是constexpr!在您的第一个示例中,s1隐含地

c++ - 如何优化这个 find_if 代码?

我有检查字符串是否只包含字母数字和下划线字符的功能......inlineboolIsValidChar(charx){return(isalnum(x)||(x=='_'));}我的find_if代码是:if(find_if(str.begin(),str.end(),IsValidChar)!=str.end()){...}我只想删除IsValidChar函数并直接将它的内容放在代码的find_if行中。 最佳答案 您基本上是在寻找C++0xlambdaexpressions:if(find_if(str.begin(),str

c++ - C/C++ : How does this inline if get parsed?

考虑这段代码:intmain(){cout它的输出将是1,而不是Yes或No。为什么将true发送到输出流而不是Yes或No字符串?内联if的其余部分如何解析? 最佳答案 这与操作顺序有关。这与:(coutcout返回ostream&,它必须转换为bool或等价物。?:的结果被扔掉了。如果这看起来很奇怪(为什么这个优先级?),请记住ostream的operator是C++代码中引入的重载,它不允许更改优先级。的优先级专为对移位有意义的内容而设计。它作为流媒体运营商的使用要晚得多。编辑:可能转换为(void*)使用这个:http://

c++ - C++中的多个if语句

我正在做第一个项目欧拉问题,我刚刚做了这个#includeusingnamespacestd;intmain(){intthrees=0;intfives=0;intboth=0;for(inti=0;i我的教授最近纠正了我在另一个问题中这样做的问题,他说了一些关于else语句的内容,但我不明白为什么我必须在下一个if前面添加else。对于它的值(value),我有另一个版本elseif(i%5){fives+=....}他们都工作并为我提供了正确的答案。我的问题是这种思维方式本质上有什么问题,是风格上的问题还是我没有从逻辑上思考某些事情?如果可行,为什么还要使用switch语句?

c++ - 带有字符串操作解决方法的 constexpr?

这previouslyansweredquestion解释了为什么我在下面发布的代码不起作用。我有一个后续问题:是否有一种概念上等效的解决方法,即实现编译时字符串连接,但以C++11实际支持的方式实现?使用std::string完全不是必需的。constexprstd::stringfoo(){returnstd::string("foo");}constexprstd::stringbar(){returnstd::string("bar");}constexprstd::stringfoobar(){returnfoo()+bar();} 最佳答案

C++ 初学者 : what is the point of using a variable by reference if using "const"?

我想知道这个函数声明中的逻辑:CMyException(conststd::string&Libelle=std::string(),...按引用使用变量有什么意义?通常,只要变量可能在内部被修改,您就会通过引用传递一个变量...因此,如果您使用关键字const,这意味着它永远不会被修改。这是矛盾的。谁能给我解释一下? 最佳答案 实际上引用是用来避免不必要的对象拷贝。现在,要理解为什么使用const,试试这个:std::string&x=std::string();//error编译会报错。这是因为表达式std::string()创

c++ - 使用 enable_if 选择特征 - 适用于 clang,但不适用于 gcc

我正在编写一段通用的(C++11)代码,它应该与boost::multi_array、Eigen::Matrix一起工作,并且可能其他类型的n维数组。在几个点上,我需要访问给定数组类型的元素类型。boost数组包含一个名为Element的typedef,而Eigen数组包含一个名为Scalar的typedef。我想要的是一个返回给定数组类型的元素类型的类型特征。不幸的是,我不能只为所有可能的数组类型模板专门化特征类,因为Eigen使用表达式模板,因此,有无限多种类型的Eigen矩阵。因此,我将SFINAE与enable_if一起使用来实现我的特征。enable_if应该选择的标准是,一

c++ - 一起使用 "new"和 "if"语句 - 语法相关

对不起大家。我的意思是在我发布的代码中有一个星号。请重新回答。我正在为同事做代码审查,我看到弹出以下语句:if((someClass*object1=newsomeClass)){//Dowork}这个说法和下面的说法一样吗?someClass*object1=newsomeClass;if(object1){//Dowork}我只是想看看它们是否相等,这样我们就不会遇到任何错误。 最佳答案 您不能在第一种形式的if条件内创建对象,除非类型立即出现在括号内,因此:if(someClass*object1=newSomeclass(.

c++ - 没有内部作用域的 if 语句?

Afaik,代码中的每一对{}都会创建一个新范围。即使它只是为了它而使用,没有任何if、for、函数或其他需要它的语句:voidmyFun(void){inta;{intlocal;}}我开始怀疑-当编写if语句时不使用大括号(带有1行正文)是否仍会创建一个新范围?voidmyFun(inta){intb;if(a==1)inttmp;//isthisonelocaltoif?elseinttmp2;//orthisone?b=2;//couldIusetmphere?} 最佳答案 N4140[stmt.select]/1读取:Th