草庐IT

Const-Qualification

全部标签

C++中const关键字的妙用

const是C++中一个强大的关键字。尤其是在类中的运用,这个小小的关键字不仅有助于代码的可读性和可维护性,还能帮助我们编写更加健壮的程序。1.const关键字的基础知识在C++中,const关键字的作用是表示一个变量或对象在其生命周期内保持不变。这使得我们能够在编译时捕获一些潜在的错误,并增强代码的可读性。首先,我们来看看const关键字在类中的基本应用。classMyClass{public://const成员函数示例voidAccessState()const{intvalue=variable;//允许访问成员变量但不修改AnotherConstFunction();//允许调用其他c

C 包装器的成员函数的 c++ const-ness

我有一个对象,在最基本的层面上看起来像这样:#includeclassx_link{public:x_link(){display_=XOpenDisplay(NULL);}~x_link(){XCloseDisplay(display_);}Display*display_ptr()const{returndisplay_;}private:Display*display_;};我想知道在这种情况下“const”x_link::display_ptr()应该如何。这个老问题,Shouldmemberfunctionsbe“const”iftheyaffectlogicalstate,

c++ - 为什么 boost::interprocess::managed_shared_ptr to non-const 不能转换为 managed_shared_ptr to const

据我了解,以下内容对boost::shared_ptr有效:boost::shared_ptrptr;...boost::shared_ptrc_ptr=ptr;//Valid相同的行为不适用于boost::interprocess::managed_shared_ptr。为什么? 最佳答案 boost::interprocess::managed_shared_ptr实际上不是共享指针;它只是一个辅助类,您可以使用它来定义一个类的类型。来自interprocessdocs:typedefmanaged_shared_ptr::ty

c++ - 通过指针获取: good practice?装饰一个char*和char const*

你好,我想就我做一个字符串类(如std::string)的想法向公众进行投票,该字符串类具有能够在客户端提供的缓冲区上工作的特性。您预见到的危险是什么?是经典的味道吗?等等我的意思是:charext[64]={0};my::strings(ext,my::string::acquire_RW);size_tlen=s.size();size_tpos=s.find("zboub");my::strings2(s);//usestrue(alloc+)copysemantichere.所以我预见了2种策略:acquire_RW和acquire_RO将允许或不允许修改ext中的字符。在RO

C++ const char* 到 const char* const

我目前正在为我的类(class)写一个作业,它应该充当一个非常基本的外壳。我快完成了,但是我遇到了execvp和我的参数字符数组的问题。这是我的代码的一小段。//Splittheleftcontentargsistringstreamiss(left);while(getline(iss,s,'')){v.push_back(s);}//Getthesplitstringandputitintoarrayconstchar*cmd_left[v.size()+1];for(unsignedinti=0;i这被...利用了execvp(cmd_left[0],cmd_left);我的错误

c++ - 什么时候需要 const volatile 对象?

C++中何时需要constvolatile对象?注意:我确实理解指针到constvolatile内存位置的必要性,但这些并不要求对象本身是const或volatile。我问的是一些constvolatile类型的自身对象,例如:constvolatileTobj;这些在哪些情况下是必要的或有用的? 最佳答案 在C++中实际需要volatile的情况很少见。volatile对多线程不再有用。来自thiswebsitevolatile只有三种可移植用途。HansBoehmpointsoutthatthereareonlythreepor

c++ - 不分配任何 char 内存的 const 字符串构造函数?

我正在尝试优化我为处理应用程序协议(protocol)的多个层而编写的一些代码。我自由使用了std::string类,力求简单而不是过早的优化。该应用程序太慢了,valgrind和gprof显示我花费了大量时间来复制构造字符串,因为缓冲区在我的堆栈中向上移动。在我看来,在将字符从系统缓冲区复制到我的最低应用程序缓冲区之后,我应该能够避免再复制数据:毕竟,它在堆栈向上移动时不会发生变化。我的协议(protocol)格式是一个“传输”,由一个或多个以换行符结尾的记录组成,每个记录由几个制表符分隔的字段组成,并以特殊的结尾token。例如RECORD1\tHAS\tTHESE\tFIELDS

c++ - 高效的 const char* 连接和输出到 std::string

这个问题在这里已经有了答案:Mostoptimizedwayofconcatenationinstrings(9个回答)关闭9年前。首先要考虑的是,将存储在输出字符串中的总数据量几乎肯定很小,因此我怀疑其中任何一个都会对性能产生显着影响。我的主要目标是找到一种连接一系列大小未知的constchar*的方法,这种方法看起来并不糟糕,同时还要牢记效率。以下是我的搜索结果:方法一:std::stringstr=std::string(array1)+array2+array3;方法二:std::stringstr(array1);str+=array2;str+=array3;我决定使用第一

c++ - 为什么 operator char*() 在 bool 上下文中覆盖 operator bool() const?

似乎在c++中,在纯bool上下文中,operatorchar*()的优先级高于operatorbool()const;并启用c++11模式和使用explicitoperatorbool()const没有帮助。这是g++中的错误还是语言标准中的错误?或者我没有看到这种疯狂行为的充分理由?问题的简单演示:#includestructA{charbuf[512];interr;operatorchar*(){returnbuf;}operatorconstchar*()const{returnbuf;}operatorbool()const{return!err;}//explicitop

c++ - Opencv,对 `cv::imread(??cv::String const&???, int)' 的 undefined reference

这个问题在这里已经有了答案:error:undefinedreferenceto`cv::imread(std::stringconst&,int)'(4个答案)Whatisanundefinedreference/unresolvedexternalsymbolerrorandhowdoIfixit?(38个答案)关闭5年前。我在QT+Opencv中有一个项目,代码可以正常工作,但我必须格式化窗口,现在我试图再次导入该项目,但出现了这个错误。对`cv::imread(cv::Stringconst&,int)'的undefinedreference在这一行中:mat=cv::imre