草庐IT

Constants

全部标签

c++ - 在 C++ 中,堆分配的对象可以是 const 吗?

在C++中,堆栈分配的对象可以声明为const:constClassobject;之后尝试在此类对象上调用非常量方法是未定义的行为:const_cast(&object)->NonConstMethod();//UB堆分配的对象可以是const并产生相同的后果吗?我的意思是有可能出现以下情况:constClass*object=newClass();const_cast(object)->NonConstMethod();//canthisbeUB?也是未定义的行为吗? 最佳答案 是的。构造和销毁const堆对象是合法的。与其他co

c++ - 在 C++ 中,堆分配的对象可以是 const 吗?

在C++中,堆栈分配的对象可以声明为const:constClassobject;之后尝试在此类对象上调用非常量方法是未定义的行为:const_cast(&object)->NonConstMethod();//UB堆分配的对象可以是const并产生相同的后果吗?我的意思是有可能出现以下情况:constClass*object=newClass();const_cast(object)->NonConstMethod();//canthisbeUB?也是未定义的行为吗? 最佳答案 是的。构造和销毁const堆对象是合法的。与其他co

c++ - 在 c++ 中,为什么编译器在 const 也可以工作时选择非常量函数?

这个问题在这里已经有了答案:Callingaconstfunctionratherthanitsnon-constversion(4个回答)关闭4年前。例如,假设我有一个类(class):classFoo{public:std::string&Name(){m_maybe_modified=true;returnm_name;}conststd::string&Name()const{returnm_name;}protected:std::stringm_name;boolm_maybe_modified;};在代码的其他地方,我有这样的东西:Foo*a;//Dostuff...st

c++ - 在 c++ 中,为什么编译器在 const 也可以工作时选择非常量函数?

这个问题在这里已经有了答案:Callingaconstfunctionratherthanitsnon-constversion(4个回答)关闭4年前。例如,假设我有一个类(class):classFoo{public:std::string&Name(){m_maybe_modified=true;returnm_name;}conststd::string&Name()const{returnm_name;}protected:std::stringm_name;boolm_maybe_modified;};在代码的其他地方,我有这样的东西:Foo*a;//Dostuff...st

C++ 常量指针声明

我正在查看一些代码,但遇到了一些我不熟悉的代码。经过一番搜索,我想不出任何例子来说明为什么这样做或这个声明的好处。myClassconst*constmyPtr=myClass->getPointer();这是一个const指针的声明还是完全不同的东西? 最佳答案 这意味着“myPtr是一个指向constconst的myClass指针”。这意味着您既不能通过此指针修改指针指向的内容,也不能在初始化后使指针指向其他地方(通过myClass->getPointer()的返回值).所以是的,你基本上是对的,除了它还指向一个const对象(

C++ 常量指针声明

我正在查看一些代码,但遇到了一些我不熟悉的代码。经过一番搜索,我想不出任何例子来说明为什么这样做或这个声明的好处。myClassconst*constmyPtr=myClass->getPointer();这是一个const指针的声明还是完全不同的东西? 最佳答案 这意味着“myPtr是一个指向constconst的myClass指针”。这意味着您既不能通过此指针修改指针指向的内容,也不能在初始化后使指针指向其他地方(通过myClass->getPointer()的返回值).所以是的,你基本上是对的,除了它还指向一个const对象(

setter/getter 中的 C++ const

我仍在学习C++,而且我到处都在阅读我必须使用const的所有地方(我认为是出于速度原因)。我通常这样写我的getter方法:constboolisReady(){returnready;}但我已经看到一些IDE以这种方式自动生成getter:boolgetReady()const{returnready;}但是,在编写委托(delegate)时,如果const在函数之后,我碰巧发现了这个错误:memberfunction'isReady'notviable:'this'argumenthastype'constVideoReader',butfunctionisnotmarkedco

setter/getter 中的 C++ const

我仍在学习C++,而且我到处都在阅读我必须使用const的所有地方(我认为是出于速度原因)。我通常这样写我的getter方法:constboolisReady(){returnready;}但我已经看到一些IDE以这种方式自动生成getter:boolgetReady()const{returnready;}但是,在编写委托(delegate)时,如果const在函数之后,我碰巧发现了这个错误:memberfunction'isReady'notviable:'this'argumenthastype'constVideoReader',butfunctionisnotmarkedco

c++ - 引用类型的数据成员提供 "loophole"围绕 const 正确性

我最近偶然发现了以下关于const正确性的“漏洞”:structInner{intfield=0;voidModify(){field++;}};structOuter{Innerinner;};classMyClass{public:Outerouter;Inner&inner;//referstoouter.inner,forconvenienceMyClass():inner(outer.inner){}voidConstMethod()const{inner.Modify();//oops;compiles}};似乎还有可能利用这个漏洞来修改声明为const的对象,我认为这是未

c++ - 引用类型的数据成员提供 "loophole"围绕 const 正确性

我最近偶然发现了以下关于const正确性的“漏洞”:structInner{intfield=0;voidModify(){field++;}};structOuter{Innerinner;};classMyClass{public:Outerouter;Inner&inner;//referstoouter.inner,forconvenienceMyClass():inner(outer.inner){}voidConstMethod()const{inner.Modify();//oops;compiles}};似乎还有可能利用这个漏洞来修改声明为const的对象,我认为这是未