草庐IT

三元表达

全部标签

c++ - 如何在编译时检测类型是否为 lambda 表达式?

假设我有一个my_struct类型,它包含一个成员变量f,它是一个函数。f可能是一个c++11lambda函数。因为分配给lambda对象是非法的,我想以这样的方式实现my_struct的赋值运算符,当f是一个lambda时,它未分配。是否可以构建类型特征is_lambda来检查类型的lambda性?在代码中:#includetemplatestructis_lambda{//whatgoeshere?};templatestructmy_struct{Functionf;my_struct&do_assign(constmy_struct&other,std::true_type){

c++ - C++ 中没有副作用的表达式

你看,我不明白的是,为什么像下面这样的程序应该是合法的?intmain(){staticconstinti=0;ii;}我的意思是,当然,没有人实际上有任何包含没有副作用的表达式的当前程序,因为那将是毫无意义的,而且它会使解析和编译语言变得更加容易。那么为什么不直接禁止它们呢?这种语言实际上从允许这种语法中获得了什么好处?另一个例子是这样的:intmain(){staticconstinti=0;intx=(i);}这种声明的实际好处是什么?诸如最令人烦恼的解析之类的事情。有没有人在其他函数中间声明函数?我的意思是,我们摆脱了隐式函数声明之类的东西。为什么不为C++0x去掉它们?

C++,三元运算符操作数评估规则

假设我有以下代码:std::vectorR;if(condition)R=generate();...for(inti=0;i无论R.empty()如何,似乎都会调用generate。这是标准行为吗? 最佳答案 来自C++11标准的第5.16/1段:Conditionalexpressionsgroupright-to-left.Thefirstexpressioniscontextuallyconvertedtobool(Clause4).Itisevaluatedandifitistrue,theresultofthecondi

c++ - 给定表达式 : `cond ? *this : throw()` 返回对类型的引用时出错

这似乎是一个错误,但我只是想确认一下。下面的格式是否正确?如果不是,为什么不呢?#includestructX{intvalue;constexprX(intvalue):value(value){}constexprX&do_something(intx){returnx在使用默认解决方案开关的VC++2015R3下,我得到:warningC4172:returningaddressoflocalvariableortemporaryg++(GCC)5.4.0带有开关-Wall-pedantic我得到:error:invalidinitializationofnon-constref

c++ - lambda 表达式(MSVC++ 与 g++)

我有以下代码#include#include#include#includeintmain(){typedefstd::vectorVector;intsum=0;Vectorv;for(inti=1;il=[&]()->double{std::for_each(v.begin(),v.end(),[&](intn){sum+=n;//ErrorHereinMSVC++});returnsum;};std::cout上述代码在MSVC++10上产生错误,而在g++4.5上编译良好。产生的错误是1IntelliSense:对lambda主体中外部作用域局部变量的引用无效c:\users\

C++ 表达式必须有常量值

#include#include#includeusingnamespacestd;templatevoidsort(intn,Ta[]){for(i=0;ia[j]){temp=a[i];a[i]=a[j];a[j]=temp;}}}}voidmain(){intsize;cout>size;intAmta[size];for(inti=0;i>Amta[i];}Sleep(100000);}我正在尝试从用户那里获取用户想要输入的数字数量并将其存储在可变大小中。但是当我初始化arrayAmta[size]时,我得到以下编译错误:Expressionmusthaveconstantva

c++ - 两个指针合法的 c++17 常量表达式之间的区别是什么?

根据cppreference核心常量表达式部分19)两个指针之间的减法运算符不是合法的常量表达式直到c++14。我可以假设以下代码是合法的c++17代码还是这种解释是一种滥用?intX,Y;templatestructS{};intmain(){Ss;(void)s;} 最佳答案 这个问题没有实际意义。指针算法只定义在属于同一个数组的指针上,当然不是这样。所以,上面的代码不是合法的C++,事实上,无法使用我可用的编译器进行编译。 关于c++-两个指针合法的c++17常量表达式之间的区别是

c++ - 从 Xcode 5.1 项目中删除所有调试表达式

我在使用C++和XCode5.1时不小心添加了一个调试表达式,现在每次我尝试查看我添加了这个表达式的函数的堆栈时,XCode都会崩溃。我不知道如何在不单击该函数的情况下摆脱这个表达式,所以我有点迷路了!我找到了对Expressions.something文件的引用,但那是针对XCode4的,我在XCode5的任何地方都看不到它。有什么想法吗? 最佳答案 这是你如何做的:1)关闭Xcode。2)在Finder中,右键单击您的Xcode项目并选择“显示包内容”,然后在需要时继续导航并打开包内容:[your_workspace].xcwo

c++ - 为什么我不能在 C++ 的三元条件语句中使用 "break"语句?

Node是一个非常简单的类,只有一个构造函数和几个变量:一个“名称”(实际上只是一个字符)和两个名为“left”和“right”的子节点指针。我刚开始写一些需要放到最左边的节点的代码,当我想到这个时我很高兴:Node*current=this->root;while(true)(current->left!=nullptr)?current=current->left:break;看起来很简单:在无限循环中,检查current是否有左child,如果有,则将current设置为左​​child,如果没有,则跳出循环。这是一个很酷的小单行,不太难读。(我评论了它!)嗯,我的编译器不喜欢它

c++ - 使用表达式初始化 char * 不起作用

以下代码产生了错误的输出:stringmy_string="My_First_Text";char*my_pointer=(char*)(my_string+"My_Second_Text").c_str();为什么?当我初始化my_pointer时,我假设不需要my_pointer=newchar[100]。如果这个假设不成立,那为什么呢? 最佳答案 注意my_string+"My_Second_Text"是一个临时的std::string,会在表达式后立即销毁。这意味着my_pointer将立即悬垂,因为它应该指向的char数组