草庐IT

propagate_const

全部标签

c++ - 是什么让 const 在机器的较低级别?

当在C++中制作一些东西const时,是什么让你不能在机器的较低级别隐式地传递一个非常量?机器如何判断这是const?(除了const的意思之外...)它是否可能存储在内存的.rdata部分中,或者是否有一些设置使其成为常量,或者它是如何工作的?谁能澄清一下? 最佳答案 const主要是编译时的东西;它并不暗示它们可能在运行时存储在哪里,或者它们是否可能在运行时受到保护。在实践中,编译器可能会选择将常量放在可执行文件的程序部分,这可能会被内存管理单元(如果存在)写保护。或者,编译器可能会将常量直接折叠到代码中,这样它们甚至不会作为可

C++,通过 const 引用访问 std::map 元素

我对const有疑问。说我有:classA{friendstd::ostream&operatorsomeMap;intsomeInteger;};std::ostream&operator由于与map的const冲突,这种代码在编译时会产生错误(如果我注释掉打印map值的那一行就没问题),如果我去掉函数原型(prototype)中的“const”很好。我真的看不出问题在哪里..有什么帮助吗? 最佳答案 std::map::operator[]不是const,因为如果元素不存在,它会插入一个元素。在C++11中,你可以使用std::

c++ - 错误 C2440 : '=' : cannot convert from 'const char [2]' to 'char'

我正在学习C++,但我在做一些新手的事情时遇到了问题。我正在尝试创建一个非常小的应用程序,它接受用户输入并将其存储到一个char数组中。然后我解析该数组并删除所有括号和dases并显示它。像下面这样(325)858-7455到3258587455但是我遇到了错误errorC2440:'=':cannotconvertfrom'constchar[2]'to'char'下面是我的简单代码,可以很容易地放入编译器并运行。#include"stdafx.h"#include#includeusingnamespacestd;/*ThisisatemplateProject*/intmain(

c++ - 将 const char * 转换为 std::string

这个问题在这里已经有了答案:Howtoconvertaconstchar*tostd::string[duplicate](6个答案)关闭8年前。我有一个从处理函数返回的constchar*,我想将它转换/分配给std::string的实例进一步操纵。这看起来应该是直截了当的,但我找不到任何说明应该如何完成的文档。显然,我错过了一些东西。见解赞赏。

c++ - g++ 将返回的字符串文字视为 const char 指针而不是 const char 数组

当从应该使用g++(版本4.7.3)执行隐式转换的函数返回字符串文字时,我看到了一些奇怪的行为。任何人都可以解释为什么以下代码:#includeclassTest{public:templateTest(constchar(&foo)[N]){printf("Templateconstchararrayconstructor\n");}Test(char*foo){printf("char*constructor\n");}};Testfn(){return"foo";}intmain(){Testt("bar");Testu=fn();return0;}产生结果:Templateco

c++ - C++11 是否允许 vector<const T>?

容器要求已从C++03更改为C++11。虽然C++03有全面的要求(例如vector的复制构造性和可赋值性),但C++11定义了每个容器操作的细粒度要求(第23.2节)。因此,您可以例如将可复制构造但不可赋值的类型(例如具有const成员的结构)存储在vector中,只要您只执行某些不需要赋值的操作(构造和push_back就是这样的操作;insert不是)。我想知道的是:这是否意味着标准现在允许vector?我看不出有什么理由不应该-constT,就像具有const成员的结构一样,是一种可复制构造但不可分配的类型-但我可能错过了一些东西。(部分让我觉得我可能遗漏了一些东西的原因是,如

c++ - 公开 begin() 和 end() 的 const 和非常量版本,以使用智能指针迭代成员 vector

//目录.hclassCat{public:voidconst_meow()const{...};voidmeow(){...};};classCatLibrary{public:std::vector>::iteratorbegin(){returnm_cat_list.begin();}//compileerror,thecompilercomplainscannotcoverttype//from`std::vector>::const_iterator`//to`std::vector>::const_iterator`std::vector>::const_iteratorb

c++ - float 的类内静态 const 初始化与 C++ 中的 int 有何不同?

我有一个包含staticconst成员的类,我正在类声明中对其进行初始化:#includeclassFoo{public:staticconstinti=9;staticconstfloatf=2.9999;};intmain(){std::cout当使用带有选项--std=c++11的GCC4.8.2编译时,它给出了这个编译错误:foo.cpp:7:32:error:‘constexpr’neededforin-classinitializationofstaticdatamember‘constfloatFoo::f’ofnon-integraltype[-fpermissive]

c++ - 模板中右值引用和 const 左值引用之间的重载

我想根据参数是否为临时对象来重载两个函数,所以我这样写代码:#includevoidf(int&&){std::cout它正确地输出:const&&&但是,当我更改代码以使用这样的模板时:#includetemplatevoidf(T&&){std::coutvoidf(constT&){std::cout输出变为:&&&&有什么问题?使用模板时如何针对可移动的临时对象进行优化?编辑:其实这是我看C++Primer时的测试代码。它说:templatevoidf(T&&);//bindstononconstrvaluestemplatevoidf(constT&);//lvaluesan

c++ - 重载解析和指向 const 的共享指针

我正在将大型代码转换为使用自定义共享指针而不是原始指针。我在重载解析方面有问题。考虑这个例子:#includestructA{};structB:publicA{};voidf(constA*){std::cout此代码正确写入“非常量版本”,因为qualificationconversions在隐式转换序列的排名中发挥作用。现在看一下使用shared_ptr的版本:#include#includestructA{};structB:publicA{};voidf(std::shared_ptr){std::cout){std::coutb;f(b);}此代码无法编译,因为函数调用不明