草庐IT

三元表达

全部标签

c++ - 使用 C++17 折叠表达式测试所有元素是否相等

我有一个采用可变参数包的函数,一开始我想检查所有元素是否相等。我能否以某种方式使用新的C++17折叠表达式将其简洁地写成一行?我在想templatevoidfunc(Args...args){ASSERT((args==...));//morecodehere...}但这不起作用,因为它编译成的代码首先正确比较最后两个参数,然后将倒数第三个参数与第一次比较的结果进行比较,这是一个bool值。这种类型的折叠表达式可能有什么用例(类似于args)?我是否有机会避免编写专门的递归模板来执行此操作? 最佳答案 不幸的是,之所以不起作用,是因

c++ - '.' 之前的预期主表达式

#includeusingstd::cout;usingstd::endl;classsquare{public:doublelength,width;square(doublelength,doublewidth);square();~square();doubleperimeter();};doublesquare::perimeter(){return2*square.length+2*square.width;}intmain(){squaresq(4.0,4.0);cout我正在尝试编写一个简单的类程序。我收到错误inmemberfunction'doublesquare::

c++ - 仅当某个编译时表达式为真时才尝试 {.... } catch(..)

这是我们正在努力做的try{std::uninitialized_copy(...);}catch(...){if(!boost::has_trivial_destructor::value){//somecleanuptodohere...}throw;}如果if中的编译时常量为假,我们想知道try/catch是否有成本。编译器能否在其“as-if”权限内删除trycatch并表现得好像std::uninitialized_copy调用出现时没有try围绕它?或者是否有隐藏在C++规范中的东西要求编译器将它留在这里?例如,想象一个假设的surrounding_try_blocks()

c++ - 为什么参数不是常量表达式?

您能解释一下为什么这段代码无法编译吗?//source.cppconstexprconstchar*func(constchar*s){returns;}constexprboolfind(constchar*param){constexprconstchar*result=func(param);return(param==0);}intmain(){constexprboolresult=find("abcde");}编译命令:$g++-std=c++14source.cpp我试过gcc5.4和gcc6.4。错误:source.cpp:Infunction‘constexprboo

c++ - 使用 Boost::Spirit 的简单表达式解析器示例?

有没有人知道在线资源,在那里我可以找到如何使用Boost::Spirit编写简单的表达式解析器?我不一定需要评估表达式,但我需要解析它并能够返回一个bool值来指示表达式是否可解析(例如,括号不匹配等)。我需要解析器能够识别函数名称(例如foo和foobar),因此这也是一个有用的示例来帮助我学习编写BNF表示法。表达式将是正规的算术方程式,即由以下符号组成:开始/结束括号算术运算符识别函数名称,并检查其所需的参数 最佳答案 这里有一些旧的Spirit原型(prototype)代码:#include#include#include#

【Java基础】Java Lambda表达式详解

Lambda表达式,即函数式编程是JDK8的一个新特性,也被称为闭包,Lambda表达式允许把函数作为一个方法的参数,即行为参数化,函数作为参数传递进方法中。Lambda表达式可以取代大部分的匿名内部类,写出更优雅的Java代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。总结就是:使用不可变值与函数,函数对不可变值进行处理,映射成另一个值。一、什么是函数式接口函数接口是只有一个抽象方法的接口,用作Lambda表达式的类型。使用@FunctionalInterface注解修饰的类,编译器会检测该类是否只有一个抽象方法或接口,否则,会报错。可以有多个默认方法,静态方法。lambda

c++ - 三元运算符中的 integral_constants

MSVC和clang/gcc对于是否可以在三元运算符中使用两个不同的整型常量(以及它们是否具有common_type)存在分歧:#includeintmain(){returnfalse?std::integral_constant():std::integral_constant();}上面的代码片段在clang和gcc中编译得很好,但在MSVC中却不行。根据标准,正确的行为是什么?如果是clang/gcc行为,那么用于推断这两种不同类型的公共(public)类型的转换序列是什么? 最佳答案 tldr;代码格式正确。条件表达式的类

c++ - 表达式必须具有指向类类型的指针

我有一个结构“MachineState”,我创建了一个“MachineState*”类型的列表。当我尝试遍历列表时,我不断得到“errorC2839:invalidreturntype'MachineState**'foroverloaded'operator->我使用的是MicrosoftVisualStudio10。我用谷歌搜索了这个错误,我所能找到的只是“->运算符必须返回一个类、结构或union,或者对它们的引用。”StructMachineState{templatefriendclassMachine;enumFacing{UP,RIGHT,DOWN,LEFT};Machi

c++ - 函数指针表达式

所以我得到了以下表达式:int(*f1(int(*a)(int,int)))(int,int);我正试图弄清它的意义,但它令人困惑。我发现“a”是一个指向带有2个参数(int,int)的函数的指针。然后f1似乎是指向另一个函数的指针,该函数接受2个int参数。但令我困惑的是f1与a的关系。谁能给我一些提示或正确解释上面的表达式在做什么? 最佳答案 它将f1声明为一个带有名为a的参数的函数。参数类型和返回类型都是“指向函数的指针,带有两个返回int的int参数”。这是你解析它的方式://f1is...f1//...afunction.

表达式必须包含整数或枚举类型 - Visual Studio C++ 错误

在使用VisualStudioC++进行编程时,有时你可能会遇到错误消息:“表达式必须包含整数或枚举类型”。这个错误通常是由于在表达式中使用了错误的数据类型导致的。在本文中,我们将详细解释这个错误的原因,并提供一些可能的解决方案。错误原因:当你在C++程序中使用一个表达式时,该表达式必须包含整数或枚举类型的值。如果你在表达式中使用了其他类型的值,比如浮点数、字符或自定义的类对象,就会触发这个错误。解决方案:要解决这个错误,你需要检查你的代码并确保表达式中使用的值是整数或枚举类型的。这里有一些常见的情况和解决方案:检查变量类型:确保你在表达式中使用的变量是整数或枚举类型的。如果你使用了其他类型的