草庐IT

const_buffers

全部标签

c++ - 如何将字符串 vector 传递给 foo(char const *const *const)?

编辑:在实现JamesHopkin的建议后,我仍然收到“无效名称‘null’”的警告,这比那些奇怪的字符要好得多。然后,我回去再次阅读库文档,结果发现对于那个特定的函数,它的参数应该比aNames的大小多一个非NULL字符串元素。该附加字符串还有其他用途。再添加一个字符串后,代码运行正常。都是我的错,我很抱歉。原帖:你好,这是我的第一篇文章,所以请多多关照。我在这个论坛上搜索并用谷歌搜索,但我仍然找不到答案。这个问题困扰了我一天多了,请大家帮帮忙。谢谢。我需要将字符串vector传递给库函数foo(charconst*const*const)。我不能传递&Vec[0]因为它是一个指向字

c++ - const 变量作为非类型模板参数(VARIABLE 不能出现在常量表达式中)

为什么会这样?char__nontype[]="foo";typedefTemplateClassMyClass;但这(带有常量变量)不是吗?constchar__nontype[]="foo";typedefTemplateClassMyClass;编译器错误:错误:‘__nontype’不能出现在常量表达式中错误:模板参数2无效 最佳答案 区别是因为const影响链接。如果您添加extern,它会起作用。也就是说,据我所知:14.3.2Templatenon-typearguments[temp.arg.nontype]Atem

c++ - 使用浮点文字初始化 const int

示例intmain(){constinti=1.0;//NoticeIamassigningadoubletoanintherechara[i];}问题用g++-O0-Wall-pedantic-ansi-std=c++11编译上面的代码没有错误(除了未使用的变量)。但是,如果我删除-std=c++11,我会收到以下警告:warning:ISOC++forbidsvariablelengtharray根据thisSOquestion,我相信在C++03中,代码是无效的。但是,有人可以解释一下规则在C++11中发生了什么变化吗?(这个问题是我回答的apreviousquestion的结果

c++11:使用 const_iterator 删除

我相信从C++11开始,erase大多数容器的功能(例如std::vector)接受const_iterator作为参数:iteratorerase(const_iteratorposition);我的编译器(GCC4.8和Clang3.2,都使用GCClibstdc++)仍然不允许我使用这样的函数,即使在使用--std=c++11编译时也是如此。.是编译器/libstdc++错误,还是我做错了什么?这是示例代码:#includeintmain(){std::vectorv;v.push_back(1);v.push_back(2);v.push_back(3);std::vector

c++ - 将 unsigned char* 转换为 const unsigned char* 后删除 []

粗略地说,我有一个包含constunsignedchar数组的类。此类的对象由一个特殊的工厂函数创建,该函数还负责(在堆上)构造数组。当在工厂函数中创建一个对象时,它会被赋予指向数组的指针。数组不会被复制,对象只会使用给定的指针。在销毁时,它将释放数组占用的内存块。classFoo{private:constunsignedchar*array;size_tsize;public:Foo(constunsignedchar*array,size_tsize):array(array),size(size){}~Foo(){delete[]array;}};Foo*factoryFunc

c++ - 共享指针和 const 正确性

将类的const正确性扩展到其指定成员的正确方法是什么?在示例代码中,get方法的常量版本是否会创建一个std::shared_ptr,其引用计数器与内部成员m_b相同,还是它重新从0开始计数?classA{std::shared_ptrm_b;public:std::shared_ptrget_b()const{returnm_b;}std::shared_ptrget_b(){returnm_b;}} 最佳答案 shared_ptr当您从另一个shared_ptr构造时,将始终保留引用计数;不安全使用它的唯一方法是从原始指针构造

c++ - 这个 const 引用是否保留了它的生命?

我找到了thisanswer问题"Doesaconstreferenceprolongthelifeofatemporary?",其中指出:Onlylocalconstreferencesprolongthelifespan.恐怕我的标准语不达标,不知道下面的foo是否是本地常量引用。我下面的conststd::string&foo是否延长了在调用get_or时创建的临时std::string函数参数的生命周期>,或者我是否有悬空引用?#include#includestructFoo{conststd::string&get_or(conststd::string&def){retu

c++ - 是否有任何理由在 C 中声明 "volatile const"而在 C++ 中仅声明 "volatile"?

我在我的项目中使用的头文件具有以下定义:#ifdef__cplusplusextern"C"{#endif#ifdef__cplusplus#define__Ivolatile/*!__I在另一个头文件中使用如下:typedefstruct{//moremembersbefore__Iuint32_tCR;/*!我的问题是为什么__I在C中而不是在C++中成为常量?您仍然可以修改CR指向的值,因为您有地址,但我只是好奇为什么__I的定义不同。对于任何对它的用途或来源感兴趣的人,__I定义来自IAREmbeddedWorkbenchARMforCortex-M4,结构来自德州仪器LM4F

c++ - 将 std::unique_ptr 类成员标记为 const

许多使用std::unique_ptr来管理类依赖项所有权的示例如下所示:classParent{public:Parent(Child&&child):_child(std::make_unique(std::move(child))){}private:std::unique_ptr_child;};我的问题是将_child成员标记为const是否会产生意想不到的副作用?(除了确保不能在_child上调用reset()、release()等)。我问是因为我还没有在示例中看到它,也不知道这是故意的还是只是为了简洁/一般性。 最佳答案

c++ - 函数模板重载 : const* vs. const&

当我有两个这样的模板化函数重载时:templatevoidfoo(Tconst&){//dosomethingwithaconstreferencecoutvoidfoo(Tconst*){//dosomethingwithaconstpointercout为什么编译器在用非常量指针类型实例化时选择第一个版本?int*bar;foo(bar);//prints"constreferenceversion"charconst*baz;foo(baz);//prints"constpointerversion" 最佳答案 原因是因为ba