草庐IT

const_cast-ing

全部标签

c++ - 为什么将 set::iterator 而不是 const_iterator 传递给函数会违反单一定义规则?

std::set的描述容器givenbycppreference.com最后包含此注释:Themembertypesiteratorandconst_iteratormaybealiasestothesametype.Sinceiteratorisconvertibletoconst_iterator,const_iteratorshouldbeusedinfunctionparameterliststoavoidviolationsoftheOneDefinitionRule.我不明白最后这句话。我的理解是一个集合不允许修改它的元素(如果你需要改变一个,你必须erase它然后inse

c++ - const 引用必须在构造函数基类/成员初始化列表中初始化

我试图阻止对我正在编写的类的默认构造函数的访问。我希望其他人使用的构造函数需要对另一个对象的const引用。我已将默认构造函数设为私有(private)以防止其他人使用它。我收到默认构造函数的编译器错误,因为const引用成员变量未正确初始化。我该怎么做才能编译?classCFoo{public:CFoo();~CFoo();};classCBar{public:CBar(constCFoo&foo):fooReference(foo){}~CBar();private:constCFoo&fooReference;CBar()//Iamgettingacompilererrorbec

c++ - 为什么在这里使用 static_cast 而不是 reinterpret_cast 很重要?

AtareplyofablogpostofRaymondChen,提问者指出Raymond,IbelievetheC++exampleisnotcorrectsincethepositionofthebaseclasssubobjectinthederivedclassisunspecifiedaccordingtoISOC++2003Standard(10-3,page168),andyouassumethatthebaseclasssubobjectisalwaysatthebeginning.TheCexamplewouldbefineinC++too,soI'dstickwit

c++ - 创建一个修改类 const 之外的数据的方法是一种好习惯吗?

我想问一个关于方法的常量正确性的问题。让我来说明一下情况。classMyClass{public:...voidDiscussedMethod(){otherClass->NonConstMethod();}private:OtherClass*otherClass;};我有一个类MyClass,它保留了一个指向OtherClass的指针。在DiscussedMethod中,它调用OtherClass::NonConstMethod修改一些可见数据。我想知道,使DiscussedMethodconst是否是一个好习惯(因为它不修改任何成员数据)?这会是一种不好的做法吗?还是两者都好?如

c++ - 编译器如何知道字符串文字(const char*)已经存在于数据存储器中?

我知道了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结果

c++ - 为什么没有从指针到对 const 指针的引用的隐式转换

我将用代码说明我的问题:#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++ - dynamic_cast<>有多快

...大约与典型的std::string::operator==()相比?我在下面提供了更多详细信息,我不确定它们是否有任何相关性。具有复杂性或近似值的答案就足够了。谢谢!详细信息:我将在列表的for循环中使用它来查找一些特定实例。我估计我的平均继承水平为3.5类。我正在寻找的那个有一个父类、一个祖父类和在这两个“接口(interface)”之上,即用几个virtualvoidabc()=0;来抽象类。没有我要查找的子类。 最佳答案 这在很大程度上取决于您的编译器、特定的类层次结构、硬件以及各种因素。您确实需要直接在您的特定应用程序

c++ - const char * 对 vector<unsigned char> 的初始化

我知道在使用C++和STL时,使用vector是存储二进制数据的好方法。但是,对于我的单元测试,我想使用constchar*C字符串变量来初始化vector。我正在尝试使用此处找到的代码变体-Converting(void*)tostd::vector-这样做:constchar*testdata="thequickbrownfoxjumpsoverthelazydog.";unsignedchar*buffer=(unsignedchar*)testdata;typedefvectorbufferType;bufferType::size_typesize=strlen((const

c++ - 如果与指针一起使用,dynamic_cast 何时会抛出异常?

我在源代码中使用dynamic_cast将指针转换为如下所示,Base*base=herestoringthepointer;Derived*derived=dynamic_cast(base);如果base没有类层次结构的指针,则转换失败并返回NULL。在接下来的几行中,我正在检查NULL。所以没问题。我遇到了故障转储,我的应用程序由于dynamic_cast抛出异常而崩溃。我知道dynamic_cast只有在与引用类型一起使用时才会抛出异常。知道当我在上面的源代码中使用指针时,dynamic_cast会抛出异常吗? 最佳答案 A

c++ - Mutex 的锁定/解锁功能应该是 "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