草庐IT

Constants

全部标签

c++ - 将 lambda 转换为 std::function 时强制执行常量正确性

我有一个函数将std::function作为参数。但是,我想确保传入的函数不允许修改传递给它的参数。下面是该函数的简单版本(注意T可以而且通常是引用):templatevoidBar(std::function)>func){//...}错误用法:Bar([](int&){/*Donastystuff!*/});/*A-OK!*/我想禁止这种用法,但这段代码编译得非常好,即使我觉得它不应该。有趣的是,如果我去掉模板参数,即:voidBar(std::functionfunc){//...}那么,这个用法就不会编译(因为它不应该):Bar([](int&){/*Donastystuff!

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++ 查找方法不是 const 吗?

我已经编写了一个方法,我想将其声明为const,但编译器会报错。追查了一下,发现问题出在这部分方法上:boolClassA::MethodA(intx){booly=false;if(find(myList.begin(),myList.end(),x)!=myList.end()){y=true;}returny;}方法中发生的事情远不止于此,但除去所有其他内容后,这就是不允许方法成为常量的部分。为什么STLfind算法会阻止方法成为const?它会以任何方式改变列表吗? 最佳答案 如果myList是自定义容器类型的对象,如果它的

c# - 如何在 C# 中处理 C++ 定义?

我有一堆*.h文件,只包含像这样的C风格定义#defineALPHA_REACTOR_CODE99641#defineBETA_REACTOR_CODE99642#defineGAMMA_REACTOR_CODE99643#defineDELTA_REACTOR_CODE99644如何在我的С#代码中使用这个文件而不做任何更改,并在我的代码中使用这个常量? 最佳答案 很抱歉我之前答应了一个迟到的答案。我的想法涉及使用运行时代码编译器和反射来动态生成一个包含所有这些常量的类。所以我看到的步骤(或伪代码)是:对于每个.h文件,读取所有以

c++ - 为什么 "const T*"在 "void*"中被简单地转换为 "operator delete"?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Deletingapointertoconst(Tconst*)voidoperatordelete(void*);...constchar*pn=newchar,*pm=(char*)malloc(1);deletepn;//allowed!!free(pm);//errorDemo.可以理解,free()是一个函数,所以constvoid*不能转换为void*。但为什么在operatordelete(默认或重载)的情况下允许这样做?它在功能上不是错误的构造吗?

c++ - type_info 不考虑 cv 限定符 : is this right?

这段代码打印1是正确的行为还是g++4.5的怪癖?#include#includeusingnamespacestd;intmain(){structA{};cout我认为cv限定符的不同类型作为非常不同的类型受到威胁,即使较少的cv限定类型可以隐式转换为更多cv限定的类型。 最佳答案 typeid根据C++标准(摘自ISO/IEC14882:2003的§5.2.8)忽略cv限定符:Thetop-levelcv-qualifiersofthelvalueexpressionorthetype-idthatistheoperandof

c++ - Const 静态方法修改值

我正在试验const关键字并试图从中获得有用的方法。#includeclassA{public:staticconstvoidmodify(float&dummy){dummy=1.5f;}};intmain(intargc,char*argv[]){autoa=49.5f;A::modify(a);std::cout此代码编译并运行,输出为1.5,我原以为编译器会出错,因为我有一个const方法试图修改参数的值。我在这里缺少什么?我如何设计不会修改参数值的方法? 最佳答案 您声明的方法不是const。它返回一个constvoid(

c++ - 为什么一个非常量静态成员会有多个定义?

C++强制程序员在类外定义一个非常量静态成员,我一直看到的原因是如果静态成员是在类内定义的,这将导致静态成员的多个定义。我明白有静态成员的多个定义是不好的,但我不明白这些多个定义在哪里定义甚至会来自。不应该是一个初始化的非常量静态成员只是进入数据部分,这是唯一的定义?structStudent{staticintx=4;//Whywouldthisresultinmultipledefinitions?};此外,我在另一篇stackoverflow帖子中读到,conststatic成员在使用它的任何地方都被简单地内联到代码中:Whycan'tIhaveanon-integralstat

c++ - Typedef、模板和 const 关键字

我在使用带有const关键字(用于函数参数类型)的模板时遇到问题,为了说明这一点,我创建了一个小代码:templatestructMethodCallerFactory{typedefReturnType(*Type)(ClassType*,Args...);templatestructMethod{staticTypecreateMethodCaller(){ReturnType(*caller)(ClassType*,Args...)=[](ClassType*obj,Args...args)->ReturnType{ReturnType(ClassType::*ptr)(Args

c++ - 在 C++14 中,constexpr 成员可以更改数据成员吗?

在C++14中,由于constexpr不再是隐式const,constexpr成员函数是否可以修改类的数据成员:structmyclass{intmember;constexprmyclass(intinput):member(input){}constexprvoidf(){member=42;}//Isitallowed?}; 最佳答案 是的,我相信这个变化是从proposalN3598:constexprmemberfunctionsandimplicitconst开始的并最终成为N3652:Relaxingconstrain