我想问一个关于方法的常量正确性的问题。让我来说明一下情况。classMyClass{public:...voidDiscussedMethod(){otherClass->NonConstMethod();}private:OtherClass*otherClass;};我有一个类MyClass,它保留了一个指向OtherClass的指针。在DiscussedMethod中,它调用OtherClass::NonConstMethod修改一些可见数据。我想知道,使DiscussedMethodconst是否是一个好习惯(因为它不修改任何成员数据)?这会是一种不好的做法吗?还是两者都好?如
我知道了charszA[]="abc";使用“abc”初始化数组szA,所以存放在栈内存中,函数结束时销毁。另一方面,考虑:char*szB="abc";这里的“abc”像静态变量一样存放在数据内存段,szB只是它的一个地址。在这一点上,我很奇怪:如果我尝试inti=0;while(i++这会在数据部分产生1000000个“hello”吗?为了解决这个问题,我编写了测试代码:#includeusingnamespacestd;char*testA(char*arr){returnarr;}char*testB(char*arr){returnarr;}voidmain(){cout结果
我将用代码说明我的问题:#includevoidPrintInt(constunsignedchar*&ptr){intdata=0;::memcpy(&data,ptr,sizeof(data));//advancethepointerreference.ptr+=sizeof(data);std::cout当我运行此代码(在VS2008中)时,我得到以下信息:错误C2664:“PrintInt”:无法将参数1从“unsignedchar*”转换为“constunsignedchar*&”。如果我取消注释“const”注释,它就可以正常工作。但是,指针不应该隐式转换为const指针,
我知道在使用C++和STL时,使用vector是存储二进制数据的好方法。但是,对于我的单元测试,我想使用constchar*C字符串变量来初始化vector。我正在尝试使用此处找到的代码变体-Converting(void*)tostd::vector-这样做:constchar*testdata="thequickbrownfoxjumpsoverthelazydog.";unsignedchar*buffer=(unsignedchar*)testdata;typedefvectorbufferType;bufferType::size_typesize=strlen((const
我正在维护一个包含Mutex类的库。我无法决定此类公开的lock()和unlock()函数是否应该是const。我在Web上查找了类似的代码,并且可以找到这两种实现。第一个实现,lock()和unlock()不是常量。这意味着在const函数中使用Mutex类的人应该付出额外的努力来调用Mutex的函数:classMutex{public:voidlock();voidunlock();};classFoo{public:voidgetBar(Bar&bar)const{m_mutex.lock();bar=m_bar;m_mutex.unlock();}private://Mutab
我想投这个:classBase{public:virtual~Base(){};};classDer:publicBase{};intmain(){constBase*base=newDer;Der*der=dynamic_cast(base);//Errorreturn0;}我该怎么办?我试着输入:constDer*der=dynamic_cast(base);维护常量,但这不起作用。 最佳答案 试试这个:constDer*der=dynamic_cast(base);dynamic_cast无法删除const限定符。您可以使用c
我对使用the的优点感到困惑bool_和bool_类型反对在模板元编程的上下文中简单地使用constbools。boost::mpl库显然更喜欢第一种方法,并定义了诸如and_、or_之类的辅助函数来帮助管理此类bool_。像if_这样的条件元函数“接受”一个bool_作为第一个(模板)参数,但在幕后“调用”一个if_c元函数,它期望一个(const)bool作为第一个(模板)参数。这个决定背后的论据是什么? 最佳答案 这是一个简短的例子,说明我如何不时地使用这些类型。这个例子是不可能的,使用constbool:voiddo_som
我收到以下错误...Operandtypesareincompatible("char"and"constchar*")...尝试执行if语句时。我假设我不了解输入值的存储方式,尽管我不确定是否可以将其转换为匹配类型?要重现的示例代码是:charuserInput_Text[3];if(userInput_Text[1]=="y"){//Dostuff.}我不确定是什么原因造成的。看起来一种类型是char而另一种是constchar指针,尽管我不确定是什么,作为引用,当我不使用数组时也会发生此错误)。非常感谢提示/反馈。 最佳答案
我正在编写的程序中出现了以下模式。我希望它不是太做作,但它设法改变了Fooconst方法中的对象Foo::Questionable()const,不使用任何const_cast或类似的。基本上,Foo存储对FooOwner的引用反之亦然,在Questionable(),Foo设法通过调用mutate_foo()在const方法中修改自身在它的主人身上。问题遵循代码。#include"stdafx.h"#includeusingnamespacestd;classFooOwner;classFoo{FooOwner&owner;intdata;public:Foo(FooOwner&ow
我希望能够将const数组参数传递给C++中的方法。我知道,当您将数组传递给方法时,它与将指针传递给数组的第一项相同,因此一种简单的方法是使用指针。voidmyMethod(int*constinTab)但是有一个数组有时会更好,例如你可以写下数组的大小。 最佳答案 您可以使用采用数组大小的模板:http://ideone.com/0QhratemplatevoidmyMethod(constint(&intArray)[N]){std::cout编辑:避免代码膨胀的一种可能方法是使用一个函数,该函数采用一个指针和一个完成实际工