草庐IT

一元谓词

全部标签

c++ - 零值上的一元运算符-() - C++

我编写这段代码是为了在矩阵类上重载一元运算符-:constRegMatrixRegMatrix::operator-()const{RegMatrixresult(numRow,numCol);inti,j;for(i=0;i当我在visualstudio中使用调试器运行我的程序时,它向我展示了当对double等于零的操作完成时,它会将结果矩阵插入数字-0.00000。它是一些奇怪的VS显示功能,还是我应该小心处理的东西? 最佳答案 Signedzeroiszerowithanassociatedsign.Inordinaryari

c++ - 在某些谓词下的编译时填充数组

有没有办法制作一个constexpr-无符号整数数组,满足constexprbool函数pred(std::size_t)给出的某些谓词?我尝试了很多,尤其是indicestrick,只是发现我的数据太大,以至于它超过了256的递归模板实例化限制。如果可以更改,我将无法更改此限制。正如评论中所问,这是我想要实现的一些伪代码:templatestructSequence{};templatestructSequenceGenerator:SequenceGenerator{};//obviouslyhereitgetstoodeepintorecursion,asmentionedtem

c++ - 将局部变量分类为 C++11 之前的谓词

以下代码在使用GCC和Clang以C++11模式构建时编译时没有错误/警告。但是,如果我尝试在没有C++11模式的情况下进行编译,并且在第二个范围内发生错误。#include#includestructastruct{intv;};structastruct_cmp0{booloperator()(constastruct&a0,constastruct&a1){returna0.valist;{//Works-noerrorsstd::stable_sort(alist.begin(),alist.end(),astruct_cmp0());}{structastruct_cmp1{

c++ - 我的谓词函数有什么问题?

我正在尝试通过std::list使用“remove_if”方法。我想删除“特殊”元素。这里有一些代码:ClassA{public:voidfoo(size_tid){tasks.remove_if(&A::IsEqual(id));//HereIhaveanerror}private:std::listtasks;structIsEqual{IsEqual(constTask&value):_value(value){}booloperator()(constsize_tid){return(_value._id==id);}Task_value;};};谁能解释一下错误在哪里?

c++ - 如何在 C++ 中重载一元和二元减号运算符?

在C++中,如何区分一元和二元负运算符的运算符重载函数?我正在尝试使用以下代码重载两者:VectorVector::operator-(){returnVector(-x,-y,-z);}VectorVector::operator-(constVector&v){returnthis*+(-v);}但这会产生很多错误:vector.cpp:Inmemberfunction‘VectorVector::operator-(constVector&)’:vector.cpp:88:20:error:passing‘constVector’as‘this’argumentof‘Vector

c++ - 带谓词的 std::map 与初始化列表

我有一个std::map使用自定义谓词:structPredIgnoreCase{booloperator()(conststd::string&str1,conststd::string&str2)const{std::stringstr1NoCase(str1),str2NoCase(str2);std::transform(str1.begin(),str1.end(),str1NoCase.begin(),tolower);std::transform(str2.begin(),str2.end(),str2NoCase.begin(),tolower);return(str1

c++ - 递归泛型函数用作谓词,编译失败

我正在编写一个函数来比较两个列表的内容。元素的顺序无关紧要,所以我在比较之前先对它们进行排序。列表可以是普通类型list,也是列表的列表list>.这是一个完整的精简示例:#includetemplateboollessThanInAnyOrder(Tlhs,Trhs){returnlhsboollessThanInAnyOrder(std::listlhs,std::listrhs){lhs.sort(lessThanInAnyOrder);rhs.sort(lessThanInAnyOrder);//Docomparisonshere,butfornowjust:returnfal

C++ 左值需要作为一元 '&' 操作数

我正在开发游戏引擎并致力于实现状态设计。我有一个Engine类,它负责所有一切的初始化,并包含调用更新、渲染和处理事件状态的输入函数的游戏循环。我所有的不同状态都继承自State,它需要在其构造函数中引用Engine类,以便初始化引擎的protected引用以供将来使用。这是相关代码://file:state.hclassEngine;classState{public:State(Engine&engine):mEngine(engine){}protected:Engine&mEngine;};//file:gamestate.hclassGameState:publicState

c++ - 丢失的一元 std::copy 的最佳实现

C++11引入了语义以避免不必要的对象复制,std::move引入了语义,否则会发生复制。但是,现在也有一些情况需要拷贝,但默认情况下不需要。例如,考虑一下reverse的这种简单实现。因为基于范围的for使用完美转发,所以在循环内修改容器相当于损坏。autoout_iter=container.rbegin();for(autovalue:container){*out_iter++=value;}目标是使用解决这个问题for(autovalue:copy(container)){这看起来很简单……接受任何参数,获取底层类型并返回一个临时拷贝。 最佳答案

c++ - 为什么一元减去进行整数提升?

constautomin=-std::numeric_limits::max();Tx=min;//conversionfrom'constint'to'short',possiblelossofdataT是一个模板参数,在本例中是一个short。一元减号显然执行积分提升。为什么一元减去进行整数提升?如果auto更改为T,则不会生成警告,但应该将int分配给short。为什么没有警告(可能是VS花哨)? 最佳答案 简短的回答:(现在很长,因为人们想对英语过分迂腐,而英语本质上是不准确的)。它不是明确的(如一元减去mathematic