草庐IT

const_cast-ing

全部标签

c++ - 如何很好地将 "cast"qint64 转换为 QProgressBar 的 int

我正在使用QFtp(是的..我知道)并且一切正常。使用他们自己示例中的代码作为指导。http://doc.qt.io/archives/qt-4.7/network-qftp-ftpwindow-cpp.html我遇到的唯一问题是在发送(或接收)大文件(比如3GB)时进度条出现故障。这是由于从qint64到int的转换:voidFtpWindow::updateDataTransferProgress(qint64readBytes,qint64totalBytes){progressDialog->setMaximum(totalBytes);progressDialog->setV

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++ 是否 reinterpret_cast 总是返回结果?

我有两个类,A和B。A是B的父类,我有一个函数接收指向A类型类的指针,检查它是否也是B类型,如果是将调用另一个函数,该函数接受一个指向类型B的类的指针。当函数调用另一个函数时,我提供reinterpret_cast(a)作为参数。如果这看起来模棱两可,这里有一个代码示例:voidabc(A*a){if(a->IsA("B")){//pleasedontworrymuchaboutthisline,//myrealconcernisthereinterpret_castdef(reinterpret_cast(a));};};现在您知道我是如何调用“def”的了,我想知道reinterp

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只接受非常