草庐IT

const_buffers

全部标签

c++ - const 迭代器在 C++14 中仍然是邪恶的吗

ScottMayers的“EffectiveSTL”中的第26项被标记为“Preferiteratortoconst_iterator,reverse_iterator和constreverseiterator”。原因是insert()和erase()的某些形式完全需要iterator并且从其他类型转换是乏味的并且容易出错。此外,比较iterator和const_iterator可能会出现问题,具体取决于STL实现。这本书出版于2001年。第26条中的建议在gcc的当前状态下是否仍然有效? 最佳答案 C++14标准(N3936)保证

c++ - 为什么这个 const const const 声明有效

friend让我解释原因constconstconstconstconstintconsti=0;是有效的语法。我拒绝对这个话题有任何想法。虽然我很好奇它是否只是语法问题?编辑。标记是C++,我的friend引用了gcc,所以我应该添加C标记。 最佳答案 来自n1256:6.7.3/4Ifthesamequalifierappearsmorethanonceinthesamespecifier-qualifier-list,eitherdirectlyorviaoneormoretypedefs,thebehavioristhesamea

c++ - 添加额外的 const 资格可以破坏功能(假设编译正常)?

当我尝试对自己的代码应用const正确性时,我经常必须在其他模块(由其他程序员编写)中的函数定义中添加const限定条件,以便在我的代码中使用这些函数自己的代码。(seehereonback-patchingconst-correctness)我一直认为,如果一切都编译得很好,这不可能导致功能损坏,因为const标签只在编译时起作用。然而,前几天我的一位同事坚持在我提交添加了const标签的代码之前,我应该重新运行所有自动化测试,我认为编译此类代码就足够了。他有意见吗?有没有办法应用const正确性可能会破坏现有功能?编辑:可能需要注意的是,一般来说,我只需要对函数的指针参数执行此操作

c++ - 对 unsigned int 中转换的 int 的 const 引用

我在理解此代码段中的行为时遇到了一些问题:unsignedinti=2;constint&r=i;std::cout第一个print语句如我所愿给出了2,但是当我更改引用变量的值时,它并没有反射(reflect)在引用中。第二个print语句也给出了2,但我认为它应该给出100?如果我将变量i变成类型int而不是unsignedint,它会按我的预期工作。这里发生了什么?Liveexample 最佳答案 你只能引用同类型的对象。你不能有一个int引用到一个unsignedint。这里发生的事情基本上是:constint&r=(int

c++ - const 变量是否放置在只读内存中?

这个问题在这里已经有了答案:Does"const"justmeanread-onlyorsomethingmore?(7个回答)关闭9年前。或者还有其他防止修改它们的保护措施吗?如果它们在只读内存中是有意义的-这就是使它们成为const的原因,对吗? 最佳答案 const是一个编译时构造,在运行时不为人所知。它只是为了帮助程序员对他的程序进行推理,并防止通过更改不应该更改的内容而引入错误。const告诉编译器你不想让这个变量被改变,所以编译器会强制执行它。 关于c++-const变量是否

c++ - 我们可以在 constexpr 函数中省略局部变量的 const 吗?

例如:constexprintg(){return30;}constexprintf(){//Canweomitconst?constintx=g();constinty=10;returnx+y;}是否有任何一点用const在constexpr函数中声明局部变量?具有const局部变量的constexpr函数是否与没有const的函数等效?换句话说,constexpr是否对函数强加(暗示)const对其局部变量? 最佳答案 在非constexpr函数中将变量声明为const的相同参数也适用于constexpr函数:声明一个变量co

c++ - 如何强制调用 const 限定函数重载?

我试图在类中调用const函数,但存在同名的非const函数。注意:我不能只更改名称。classMyQuestion{voidfun(){cout 最佳答案 选项#1:通过指向const限定类型的指针调用该函数:voidcall(){static_cast(this)->fun();//~~~~^}c++11:voidcall(){constauto*that=this;//~~^that->fun();}c++17:voidcall(){std::as_const(*this).fun();//~~~~~~~^}选项#2:使调用函

c++ - 为 const 数据创建 cv::Mat header

通常,如果我的数据是非常量的,我可以在其上初始化一个cv::Matheader以进行代数操作。floatawesome_data[24]={0};cv::Matawesome_mat=cv::Mat(6,4,CV_32F,awesome_data);但是,如果我的数据是constconstfloatawesome_data[24]={0};cv::Matawesome_mat=cv::Mat(6,4,CV_32F,awesome_data);会有错误:无法从constvoid*转换为void*。我知道我不会更改awesome_mat,最好的方法是什么?目前,我必须做一个constcas

c++ - "T const&t = C().a;"是否会延长 "a"的生命周期?

给出以下场景,解释为C++0x代码:structB{};structA{Bb;};intmain(){Bconst&b=A().b;/*istheobjectstillalivehere?*/}Clang和GCC(2011/02的主干版本)行为不同:Clang延长了生命周期。GCC将B移动到一个新的临时对象,然后将引用绑定(bind)到那个新的临时对象。我找不到任何一种行为可以源自标准的文字。表达式A().b不是临时的(见5.2.5)。谁能给我解释一下以下内容?期望的行为(委员会的意图)从FDIS派生的行为谢谢! 最佳答案 在N31

c++ - const_cast 和 std::move 从非引用中删除常量

我有一个无法修改的外部库。该库声明了一个模板函数,由于某种原因返回const非引用对象:templateconstCfoo();我还有另一个无法修改的外部库。该库声明了一个不可复制的类,并且仅具有来自非常量对象的move构造函数:structbar{bar();bar(constbar&)=delete;bar(bar&&);};现在我需要使用foo.一个简单的用法:barbuz(){returnfoo();}失败main.cpp:Infunction'barbuz()':main.cpp:13:21:error:useofdeletedfunction'bar::bar(constb