草庐IT

const-cast

全部标签

C++ 和 const - 访问 const 引用的成员函数

我这里有这段代码。目的是复制initialData。因为我没有以任何方式修改initialData,所以我认为我应该将它作为常量引用传递。但是,我在编译时不断收到此消息。.\src\Scene\SceneAnimationData.cpp(23):errorC2662:'SceneTrackerData::getRect':cannotconvert'this'pointerfrom'constSceneTrackerData'to'SceneTrackerData&'#include"SceneTrackerData.h"voidSceneAnimationData::SetupDa

c++ - 在派生对象到基类的 "this"指针上使用 static_cast 的问题

这是取自EffectiveC++3ed的一个例子,它说如果这样使用static_cast,对象的基础部分被复制,并且调用从该部分调用。我想了解幕后发生的事情,有人会帮忙吗?classWindow{//baseclasspublic:virtualvoidonResize(){}//baseonResizeimpl};classSpecialWindow:publicWindow{//derivedclasspublic:virtualvoidonResize(){//derivedonResizeimpl;static_cast(*this).onResize();//cast*thi

c++ - 这行代码中的 `const char* yes[5]`代表什么?

我对C++中的typedef有疑问例如:typedefconstchar*yes[5];typedef是否给出了constchar*的替代名称,因此constchar*的替代名称是yes[5]?yes[5]这里代表什么?以及如何创建两个yes数组并初始化两者之一? 最佳答案 没有。这声明了一个yes类型,它是五个constchar*的数组。参见thislink并在文本区域内键入constchar*yes[5];。 关于c++-这行代码中的`constchar*yes[5]`代表什么?,我

c++ - 用指针理解 const_iterator?

我试图理解const_iterator的含义。我有以下示例代码:voidCustomerService::RefreshCustomers(){for(std::vector::const_iteratorit=customers_.begin();it!=customers_.end();it++){(*it)->Refresh();}}Refresh()是Customer类中的一个方法,它没有定义为const。起初我以为const_iterator应该禁止修改容器的元素。但是,此代码可以毫无怨言地编译。这是因为正在进行额外级别的间接访问吗?const_iterator究竟是做什么/

C++ 函数返回 const char *

我为单元测试类开发了一个小辅助函数,它需要我的vector并将其转换回constchar*.我写这个是为了将它传递给gtest的ASSERT_STREQ用于简单比较的宏。在这里:constchar*convertVecToChar(std::vector&source){std::vector::size_typesize=source.size();char*data=(char*)malloc(sizeof(char)*(size+1));memcpy(data,&source[0],size);data[size]=0;returndata;}这是一个被调用的例子:ASSERT_

c++ - 我可以在不更改 use_count 的情况下将 shared_ptr<T> & 转换为 shared_ptr<T const> & 吗?

我有一个使用boost::shared_ptr的程序s,特别是依赖于use_count的准确性执行优化。例如,假设一个加法运算有两个参数指针lhs和rhs。假设他们都有类型shared_ptr.当需要执行加法时,我会检查use_count,并且如果我发现其中一个参数的引用计数恰好为1,那么我将重新使用它来就地执行操作。如果两个参数都不能重用,我必须分配一个新的数据缓冲区并执行异地操作。我正在处理庞大的数据结构,因此就地优化非常有用。因此,我永远无法复制shared_ptr没有理由,即每个函数都采用shared_ptrs通过引用或const引用以避免扭曲use_count.我的问题是:我

c++ - 为什么data()和c_str()返回的是char const*,而operator[]返回的是char&?

为什么std::string::data和std::string::c_str()返回指向const字符的指针,而std::string::operator[]返回对可变字符的引用?std::stringstring("eightfoldisthegreatest");autos=string.data();*s='r';//illegalautot=&string[0];*t='r';//totallyfineauto&c=string[0];c='r';//totallyfine为什么std::string::data()和std::string::c_str()不返回char*,

c++ - 为什么声明为类成员的 const 变量仍然可以修改?

如果一个已经被赋值的const变量仍然可以被重新赋值,那么它不是一个const?举个例子:structss{constintm=1024;ss(){}ss(intm):m(m){}};sssa;sssb(-1);cout哇m毕竟不是常数!>/*Ouput:>>1024>-1>>*/ 最佳答案 ss(intm):m(m){}这表示当类ss被初始化时,它的成员m使用参数m被初始化。成员m确实不能修改,但可以初始化,就像任何其他const对象一样。请注意,如果我们改为这样做ss(intm){this->m=m;}那么我们就会遇到问题,因为

c++ - std::static_pointer_cast 与 static_cast<std::shared_ptr<A>>

我有一个类层次结构,其中B源自A像这样:classA:publicstd::enable_shared_from_this{};classB:publicA{voidf(){//thecodebelowcompilesstd::shared_ptrcopyOfThis=std::static_pointer_cast(shared_from_this());//thecodebelowdoesnotstd::shared_ptrcopyOfThis=static_cast>(std::make_shared(shared_from_this()));}};所以实际上我想了解为什么我不能

c++ - 如何将 const 应用于 C++ 中参数列表之外的模板参数类型?

我正在研究C++模板,但我一直在思考const和作为模板函数参数的类型之间的交互。具体来说,我正在考虑在模板参数列表之外应用时常量如何与模板类型交互。我曾尝试在C++Primer5thed(Lippman)和C++11标准草案中寻找这种交互,但是const在这种情况下要么没有明确提及,要么(在标准的情况下)相当复杂它的描述(我对C++还是有些陌生)。这是我的问题的代码示例:templateconstT&constify(T&t){returnt;}...int*i=0x12345678;constify(i);我对返回类型有两种不同的期望:推导出的返回类型是const(int*)&,即