草庐IT

const_buffers

全部标签

c++ - 没有堆的 static const std::vector<char> 初始化?

假设我想要一个无符号字符的std::vector。它是用初始化列表(这是C++11)初始化的,永远不会改变。我想避免任何堆分配,即使在启动时也是如此,并让整个vector像const字符串一样存在于数据段中。那可能吗?IE:staticconstvectorv{0x1,0x2,0x3,0x0,0x5};(这是一个有点学术性的问题;我知道为此使用C数组并不难。) 最佳答案 为什么不直接使用std::array为此?staticconststd::arrayv{0x1,0x2,0x3,0x0,0x5};这避免了任何动态分配,因为std:

c++ - 使 char 函数参数为 const?

考虑这个函数声明:intIndexOf(constchar*,char);其中char*是一个字符串,char是要在字符串中查找的字符(如果未找到char则返回-1,否则返回其位置)。使char也const有意义吗?我总是尝试在指针参数上使用const,但当按值调用某些内容时,我通常会不使用const。你有什么想法? 最佳答案 假设您不打算调整任一参数的值:我会将函数定义为:intIndexOf(constchar*const,constchar){//...}但保留函数声明为:intIndexOf(constchar*,char)

c++ - vector<const int> 是不允许的。为什么 pair<const int, int> 被允许?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whydoesstacknotcompileing++?Ananswertoanotherquestion解释了为什么我们(假设)不能拥有const对象的容器。例如,这是不允许的:vectorv;//notallowed但是为什么对允许第一个对象是const?这确实是map对象中的pair发生的情况。我错过了什么吗?非常感谢对这种现象的详细和直观的解释。

c++ - 缓存 const char * 作为返回类型

阅读了一些关于我的C++的内容,发现了这篇关于RTTI(运行时类型识别)的文章:http://msdn.microsoft.com/en-us/library/70ky2y6k(VS.80).aspx.好吧,那是另一个主题:)-然而,我在type_info类中偶然发现了一个奇怪的说法,即关于::name方法。它说:“type_info::name成员函数返回一个constchar*到一个以null结尾的字符串,表示该类型的人类可读名称。内存指向已缓存,永远不应直接释放。”你怎么能自己实现这样的东西!?我以前经常在这个确切的问题上苦苦挣扎,因为我不想为调用者创建一个新的char数组来删除

c++ - 为什么即使在 const 函数中也会更改值?

#includeusingnamespacestd;classtemp{intvalue1;public:voidfun()const{((temp*)this)->value1=10;}voidprint(){cout 最佳答案 因为你要丢弃const...当你转换某些东西时,你有责任确保它不会做一些愚蠢的事情。请注意,如果tempt;更改为consttempt;,您将获得未定义的行为,用于修改const值。巧合的是,我刚刚在myblog中提到了这一点.(也几乎相同的功能。) 关于c+

c++ - Const 方法访问静态变量

如果之前有人问过这个问题,我深表歉意。我的搜索结果没有出现类似的问题。这是一个概念性的问题。根据MSDN以及其他人:Aconstantmemberfunctioncannotmodifyanydatamembersorcallanymemberfunctionsthataren'tconstant为什么允许我们从const方法访问静态成员变量? 最佳答案 因为它们不是对象的一部分。 关于c++-Const方法访问静态变量,我们在StackOverflow上找到一个类似的问题:

c++ - 错误 :incompatible types in assignment of 'const char[5]' to 'char[10]'

我已经将c定义为charc[][10]在函数定义中并像c[i]="gray";一样使用它怎么了?我在网上搜索,它显示相同的语法。谢谢。 最佳答案 您不能对数组使用赋值(=)。如果将c更改为指针数组,这可能会起作用,具体取决于您需要使用它做什么。constchar*c[20];c[i]="gray";或者如果声明的类型必须是数组的数组,您可以使用strncpy:charc[20][10];strncpy(c[i],"gray",sizeof(c[i])); 关于c++-错误:incompa

非 const 指针成员上的 C++ const 方法

我想知道如何通过const方法保护非const指针成员不受对象影响。例如:classB{public:B(){this->val=0;}voidsetVal(){this->val=2;}private:intval;};classA{public:A():b(newB){}voidchangeMemberFromConstMethod()const{this->b->setVal();}private:B*b;//howtoprotectdatapointedinA::changeMemberFromConstMethod}是否可以“保护”他的方法指向的A::b数据?在网络上进行了大

c++ - 具有模板参数大小的 Const char 数组与 char 指针

我今天在一些代码中看到了以下类型的构造:templateunsignedintf(constchar(&a)[N]);有这个比有任何合理的点:unsignedintf(constchar*a);我隐约理解后者的指针共享含义,但它真的很糟糕,需要用两倍大小的晦涩代码代替吗?(不幸的是,我不能问代码的作者,否则我会) 最佳答案 将任何原始指针传递给函数的目的是调用者有一些想法:它指向什么。它指向多少。作为输入参数的C风格字符串推断后者,因为假设“多少”被认为是到达空字符终止符。但是如果您不传递C风格的字符串怎么办?如果它只是零个或多个c

c++ - 模板中的 const_cast。有 unconst 修饰符吗?

我有一个这样的模板类:templateclassMyClass{T*data;}有时,我想像下面这样使用具有常量类型T的类:MyClassmci;但我想使用const_castdata修改数据(为什么不重要,但MyClass是一个引用计数智能指针类,它将引用计数保存在数据本身中。MyObject派生自某种包含计数的类型。数据不应该被修改,但计数必须被智能指针修改。)。有没有办法从T中移除常量性??虚构代码:const_cast(data)? 最佳答案 这里最简单的方法是使引用计数可变。但是,如果您对它如何与const_cast一起工