草庐IT

const-ref

全部标签

c++ - const char[] 默认函数参数

我定义了这样一个类型:typedefcharsType[256];和一个带有默认参数的函数:voidfoo(constsTypeparam=NULL);MinGW(g++4.8.0)编译它没有错误。相反,VisualStudio2015(Tools14.0)给出了以下错误:errorC2040:'sType':'int'differsinlevelsofindirectionfrom'char[256]'我试图将NULL转换为constchar[],但这会导致:errorC2440:'typecast':cannotconvertfrom'int'to'constchar[]'有什么提

c++ - 在 C++ 中创建对三元运算符结果的 const 引用是否安全?

这段代码中发生了一些不明显的事情:floata=1.;constfloat&x=true?a:2.;//Note:`2.`isadoublea=4.;std::coutclang和gcc输出:4,1人们会天真地期望相同的值被打印两次,但事实并非如此。这里的问题与引用无关。有一些有趣的规则规定了的类型?:。如果两个参数的类型不同并且可以转换,则它们将使用临时对象。引用将指向的临时值?:。上面的示例编译正常,并且在使用-Wall编译时可能会或可能不会发出警告,具体取决于您的编译器版本。下面是一个例子,说明在看起来合法的代码中出错是多么容易:templateconstT&min(constI

c++ - 专门针对 const 成员函数指针

我正在尝试将一些实用程序代码专门用于const成员函数,但在让简单的测试用例工作时遇到问题。为了简化工作,我正在使用Boost.FunctionTypes及其components模板-应该是contain的MPL序列标签const_qualified对于const成员函数。但是使用下面的测试代码,常量成员函数的特化失败了。有人知道如何让它发挥作用吗?测试代码打印出来(使用VC8和boost1.40):non-constnon-const预期输出是:non-constconst测试代码本身:#include#include#include#include#includenamespace

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