草庐IT

const_buffers

全部标签

c++ - 为什么现在 "{static const char a[]={...}"和 "{const char a[]={...}"之间存在差异?

看看Ccode的这个小片段或C++code在神bolt上……voidb(charconst*c);voida(void){charconstz[]={0xd,0xe,0xa,0xd,0xb,0xe,0xe,0xf,0xa};b(z);}voidc(void){staticcharconstz[]={0xd,0xe,0xa,0xd,0xb,0xe,0xe,0xf,0xa};b(z);}早期版本的gcc将a()和c()都编译成两条指令,加载z的地址,跳转到b。我尝试将所有现代编译器“悲观”a()以“制作堆栈帧,将z复制到堆栈上,调用b,拆除堆栈帧,但将c()保留为两个指令的简单版本。实际上

c++ - 传递 const char* 作为模板参数

为什么你不能在这里传递文字字符串?我用一个非常轻微的解决方法让它工作。templatestructlols{lols():i(ptr){}std::stringi;};classfile{public:staticconstchararg[];};decltype(file::arg)file::arg=__FILE__;//Gettingtherighttypedeclarationforthiswasirritating,soIC++0xedit.intmain(){//lolshi;//Error:Atemplateargumentmaynotreferenceanon-exte

c++ - 传递 const char* 作为模板参数

为什么你不能在这里传递文字字符串?我用一个非常轻微的解决方法让它工作。templatestructlols{lols():i(ptr){}std::stringi;};classfile{public:staticconstchararg[];};decltype(file::arg)file::arg=__FILE__;//Gettingtherighttypedeclarationforthiswasirritating,soIC++0xedit.intmain(){//lolshi;//Error:Atemplateargumentmaynotreferenceanon-exte

C++0x const RValue 引用作为函数参数

我试图理解为什么有人会编写一个采用constrvalue引用的函数。在下面的代码示例中,constrvalue引用函数的用途是什么(返回“3”)。以及为什么重载解析优先于constLValue引用函数(返回“2”)之上的constRvalue。#include#include#includestd::vectorcreateVector(){returnstd::vector();}//takesmovablervaluevoidfunc(std::vector&&p){std::cout&p){std::cout&&p){std::cout 最佳答案

C++0x const RValue 引用作为函数参数

我试图理解为什么有人会编写一个采用constrvalue引用的函数。在下面的代码示例中,constrvalue引用函数的用途是什么(返回“3”)。以及为什么重载解析优先于constLValue引用函数(返回“2”)之上的constRvalue。#include#include#includestd::vectorcreateVector(){returnstd::vector();}//takesmovablervaluevoidfunc(std::vector&&p){std::cout&p){std::cout&&p){std::cout 最佳答案

c++ - 为什么调用 cout.operator<<(const char*) 打印地址而不是字符串?

我正在探索ostreamC++中的类。我被cout的奇怪输出卡住了关于字符串和整数数据类型。当传递一个整数或浮点值时,输出正是我传递的。例如cout.operator打印10.但是当将字符串作为参数传递时,它会打印一些十六进制值:#include#includeusingnamespacestd;intmain(){constchar*str="aia";cout.operator输出:0x4007e0. 最佳答案 当你这样做cout.operator您调用cout的operator成员函数。如果我们看一下memberfunctio

c++ - 为什么调用 cout.operator<<(const char*) 打印地址而不是字符串?

我正在探索ostreamC++中的类。我被cout的奇怪输出卡住了关于字符串和整数数据类型。当传递一个整数或浮点值时,输出正是我传递的。例如cout.operator打印10.但是当将字符串作为参数传递时,它会打印一些十六进制值:#include#includeusingnamespacestd;intmain(){constchar*str="aia";cout.operator输出:0x4007e0. 最佳答案 当你这样做cout.operator您调用cout的operator成员函数。如果我们看一下memberfunctio

c++ - 我应该更喜欢迭代器而不是 const_iterators 吗?

最近有人broughtupScottMeyers的文章说:优先使用iterators而不是const_iterators(pdflink)。其他人评论说这篇文章可能已经过时了。我想知道你的意见是什么?这是我的:这篇文章的主要观点之一是您不能在const_iterator上删除或插入,但我认为将其用作反对const_iterators。我认为const_iterators的全部意义在于您根本不修改范围,既不是通过替换它们的值来修改元素本身,也不是通过插入或删除来修改范围。还是我错过了什么? 最佳答案 我完全同意你的看法。我认为答案很简

c++ - 我应该更喜欢迭代器而不是 const_iterators 吗?

最近有人broughtupScottMeyers的文章说:优先使用iterators而不是const_iterators(pdflink)。其他人评论说这篇文章可能已经过时了。我想知道你的意见是什么?这是我的:这篇文章的主要观点之一是您不能在const_iterator上删除或插入,但我认为将其用作反对const_iterators。我认为const_iterators的全部意义在于您根本不修改范围,既不是通过替换它们的值来修改元素本身,也不是通过插入或删除来修改范围。还是我错过了什么? 最佳答案 我完全同意你的看法。我认为答案很简

c++ - 如何从析构函数调用 const 成员函数

当const对象被销毁时,有没有办法从析构函数中调用const成员函数?考虑:structMy_type{~My_type(){show();}voidshow(){cout及用法:My_typemt;constMy_typecmt;mt.show();cmt.show();输出:voidshow()voidshow()constvoidshow()voidshow()有人能解释一下为什么当cmt被销毁时没有调用const版本的show吗? 最佳答案 在const实例上调用非常量重载的原因是因为在销毁期间不考虑当前实例上的cv限定符