草庐IT

LOAD_CONST

全部标签

c++ - 没有从 const_iterator 类型的返回值到迭代器的可行转换

灵感来自Antony'sWilliams"C++ConcurrencyinAction"我想仔细看看他的线程安全HashMap。我复制了它的代码并添加了一些输出运算符,这就是我想出的:#include#include#include#include#includetemplate>classthread_safe_hashmap{private:classbucket_type{public:typedefstd::pairbucket_value;typedefstd::listbucket_data;typedeftypenamebucket_data::iteratorbucke

c++ - const char* 是字符串还是指针

我认为constchar*表示指向不可变字符串的可变指针。但是,当我这样做的时候,#includeusingnamespacestd;constchar*name1="Alex";intmain(){name1="John";cout它只打印John并且没有显示任何问题。我想知道为什么程序将name1视为字符串并使其可变? 最佳答案 Iwonderwhytheprogramtreatsname1asastringandmakesitmutable?它不是,您只是为指针分配了一个新地址("John"的地址)。您自己说过“指向不可变字符

c++ - 从另一个 const std::map 初始化 const std::map 的一部分

我有一个conststd::map初始化如下:conststd::mapfirstMap={{1,"First"},{2,"Second"}};然后我想制作另一个conststd::map,它使用第一个映射作为其初始值的一部分,并且还扩展了原始数据。所以我猜这将是类似的东西:conststd::mapsecondMap={{},{3,"Third"}};因此secondMap具有三对。这可能吗?编辑:map也声明为外部。 最佳答案 不,std::map没有合适的构造函数。但是,您可以做的是使用lambda就地初始化变量。consta

c++ - 在一组中保存一堆 const char* 的最简单、最安全的方法?

我想将一堆constchar指针保存到一个std::set容器中[1]。std::set模板需要一个比较仿函数,标准C++库提供了std::less,但它的实现是基于直接比较两个键,这不是指针的标准。我知道我可以定义自己的仿函数并通过将指针转换为整数并比较它们来实现operator(),但是是否有更简洁、“标准”的方式来实现它?请不要建议创建std::strings-这是浪费时间和空间。字符串是静态的,因此可以根据它们的地址比较它们是否相等。1:指针指向静态字符串,因此它们的生命周期没有问题——它们不会消失。 最佳答案 如果您不想将

c++ - 如何定义指向 const 对象的可变指针?

我有一个类,它包含一个指向类外部常量VARIANT值的指针,但有时我想更改此指针以引用类本身的VARIANT成员对象。这个类的大多数实例都是常量,所以我必须将指针声明为可变的。在VisualC++中,这段代码似乎可以满足我的要求:VARIANTmutableconst*m_value;但是,由于mutable是指针的属性而不是指针的属性,所以我认为这是正确的语法:VARIANTconst*mutablem_value;类似于定义常量指针(而不是指向const对象的指针)的方式。不过,VisualC++不接受这种变体。警告C4518:“可变”:此处意外的存储类或类型说明符;忽略Visua

C++ : const reference to local object

conststd::strings1="abc";conststd::string&s2="abc";s2的定义合法吗?如果是这样,s1和s2之间有什么区别?谢谢。 最佳答案 是的,s2是合法的。s2绑定(bind)到临时std::string-延长临时生命周期。s1不是临时变量,而是命名变量。参见12.2/5:Thesecondcontextiswhenareferenceisboundtoatemporary.Thetemporarytowhichthereferenceisboundorthetemporarythatisth

c++ - 如何避免在 C++ 中将 const_cast 与 std::vector::erase() 一起使用?

我有这样一个类:templateclassAdjacencyList{public:voiddelete_node(constT&);protected:consttypenamestd::vector::const_iterator_iterator_for_node(conststd::vector&,constT&);};templatevoidAdjacencyList::delete_node(constT&node){_nodes.erase(_iterator_for_node(_nodes,node));}templateconsttypenamestd::vector

c++ - 如何将 `const char *` 转换为简单的 `char *` ?

我正在使用pdCurses库,我的目标是在我的C++控制台游戏中只真正使用字符串,但是cursesmvinstr()函数或任何插入函数需要非常量char*作为参数。我最初解决这个问题的方法是简单地输入string.c_str(),但它返回一个constchar*,显然不适用于该功能。接下来我输入(char*)string.c_str()但这只会导致未处理的异常。最后,我尝试了char*test=string.c_str(),但这与const也不兼容。我该怎么做才能解决这个问题?K我刚刚尝试了const_cast()并且我仍然抛出异常并中断....我不知道为什么PDcurses只接受非常

c++ - 使用对按值返回值的 const 引用

看下面的例子:stringfoo(inti){stringa;...Processitobuilda...returna;}voidbar(intj){conststring&b=foo(j);cout我知道RVO和NRVO,但我认为为了做到这一点,我需要按如下方式编写bar:voidbar(intj){stringb=foo(j);cout这两个版本似乎都有效,而且我相信性能相同。使用第一个版本(带有const引用)是否安全?谢谢。 最佳答案 将临时对象分配给const引用是完全有效的。临时对象将一直存在,直到引用超出范围。虽然在

c++ - NULL 直接传递给需要 const 引用参数的函数 (VC++ 4.2)

我正在查看我在旧代码库中发现的一些东西,我很困惑。这是一个函数定义:voidvUpdateSequenceDetailsAndIncrement(constCallEvent&roCPEvent,constCallInfo&roCallInfo,BOOLbCreationEvent);这里是这样调用的:vUpdateSequenceDetailsAndIncrement(roCPEvent,NULL,FALSE);此处NULL被直接传递给引用参数roCallInfo。该函数最终调用:vTimeChange(*pSeqDetails,roCPEvent,roCallInfo);定义:vo