草庐IT

const_buffers

全部标签

c++ - 头文件中的 const 变量和静态初始化失败

在阅读了很多关于静态变量初始化的问题后,我仍然不确定这如何适用于命名空间级别的const变量。我在构建脚本生成的header文件config.h中有以下代码:staticconststd::stringpath1="/xyz/abc";staticconststd::stringpath2="/etc";根据我阅读的内容,static关键字不是必需的,甚至在此处已弃用。我的问题:上面的代码是否容易出现静态初始化失败?如果我在header文件myclass.h中有以下内容:classMyClass{public:MyClass(conststd::string&str):m_str(st

c++ - std::set 迭代器自动 const

这个问题在这里已经有了答案:关闭10年前.PossibleDuplicate:C++STLsetupdateistedious:Ican'tchangeanelementinplace为了简单起见,我已经提取了问题并更改了名称。基本上我实例化一个类并将其存储在std::set中,稍后我想引用该类,以便我可以检查它的值并修改它们...简化代码:MyClasstmpClass;std::setsetMyClass;setMyClass.insert(tmpClass);std::set::iteratoriter;iter=setMyClass.begin();MyClass&tmpCla

c++ - 既然字符串文字被认为是左值,为什么绑定(bind)左值引用必须是 const?

我知道已经有类似的主题(例如this)。本主题中给出的示例是这样的:std::string&rs1=std::string();很明显,std::string()是一个右值。但是,我的问题是为什么s1合法而s2不合法?conststd::string&s1="Stringliteral";std::string&s2="Stringliteral";该标准明确指出字符串文字是左值(这是可以理解的,因为它们在技术上是constchar*在幕后)。但是,当我编译s2时,我得到以下信息:prog.cpp:4:19:error:invalidinitializationofnon-constr

c++ - 从 const 映射中读取的惯用 C++

对于std::mapvariables,我想这样做:BOOST_CHECK_EQUAL(variables["a"],"b");唯一的问题是,在这种情况下variables是const,所以operator[]不会工作:(现在,有几种解决方法;抛弃const,使用variables.count("a")?variables.find("a")->second:std::string()甚至制作一个包装它的函数。在我看来,这些都没有operator[]好。.我应该怎么办?有没有标准的方法(漂亮地)?编辑:只是为了说明你们都不想给出的答案:不,在C++中没有方便、美观、标准的方法来做到这一

c++ - 为什么 std::distance 不适用于 const 和非 const 迭代器的混合?

这个问题在这里已经有了答案:autoit=vector.begin()resultingtypeisnotconvertibletoconst_iterator(3个回答)关闭6年前。就像问题所说的那样,我想知道其中的原因。因为当我尝试获取const和非const迭代器之间的距离时出现错误。vectorv;autoit=v.begin();autocit=v.cbegin();distance(it,cit);nomatchingfunctionforcallto‘distance(__gnu_cxx::__normal_iterator>&,__gnu_cxx::__normal_i

c++ - 将 const 放在标题中

根据我正在阅读和测试的所有内容,无法(没有预处理器宏)在共享header中定义常量并确保每个TU不会为该常量创建自己的存储。我可以这样做:constintmaxtt=888888;完全一样:staticconstintmaxtt=888888;如果此header是共享的,它将起作用,但每个TU都会获得自己的maxtt拷贝。我也可以这样做,以防止:externconstintmaxtt;但是我不能在这里定义maxtt;必须在CPP中完成以避免链接器错误。我的理解正确吗? 最佳答案 由于变量是常量,因此每个TU都有自己的拷贝这一事实通常

c++ - 有没有办法得到标准 :string's buffer

有没有办法从std::string中获取“原始”缓冲区?我正在考虑类似于CString::GetBuffer()的东西。例如,使用CString我会这样做:CStringmyPath;::GetCurrentDirectory(MAX_PATH+1,myPath.GetBuffer(MAX_PATH));myPath.ReleaseBuffer();那么,std::string有类似的吗? 最佳答案 虽然有点不正统,但使用std::string作为线性内存缓冲区是完全有效的,唯一需要注意的是,直到C++11标准才支持它.std::s

c++ - 函数定义后 "const -> std::string const&"的含义?

阅读C++Primer,5thEdition中一​​个练习的答案,我发现了这段代码:#ifndefCP5_ex7_04_h#defineCP5_ex7_04_h#includeclassPerson{std::stringname;std::stringaddress;public:autoget_name()const->std::stringconst&{returnname;}autoget_addr()const->std::stringconst&{returnaddress;}};#endif是什么const->std::stringconst&在这种情况下是什么意思?

c++ - 强制转换运算符 - const 与非 const

我有这个代码示例:classNumber{inti;public:Number(inti1):i(i1){}operatorint()const{returni;}};从强制转换运算符中删除const修饰符有什么影响?它会影响自动转换吗?为什么? 最佳答案 如果转换运算符不是const,则不能转换const对象:constNumbern(5);intx=n;//error:cannotcallnon-constconversionoperator 关于c++-强制转换运算符-const与

c++ - 静态 const char* 和 const char* 之间的区别

有人能解释一下下面2段代码的处理方式的区别吗?它们肯定会编译成不同的汇编代码,但我试图了解代码如何表现不同。我知道字符串文字被放入只读内存并且实际上是静态的,但这与下面的显式静态有何不同?structObj1{voidFoo(){constchar*str("hello");}};和structObj2{voidFoo(){staticconstchar*str("hello");}}; 最佳答案 在您的静态版本中,只有一个变量将存储在某处,并且无论何时执行该函数,都将使用完全相同的变量。即使是递归调用。非静态版本将在每次函数调用时