草庐IT

const_cast-ing

全部标签

c++ - 共享指针和 const 正确性

将类的const正确性扩展到其指定成员的正确方法是什么?在示例代码中,get方法的常量版本是否会创建一个std::shared_ptr,其引用计数器与内部成员m_b相同,还是它重新从0开始计数?classA{std::shared_ptrm_b;public:std::shared_ptrget_b()const{returnm_b;}std::shared_ptrget_b(){returnm_b;}} 最佳答案 shared_ptr当您从另一个shared_ptr构造时,将始终保留引用计数;不安全使用它的唯一方法是从原始指针构造

c++ - 这个 const 引用是否保留了它的生命?

我找到了thisanswer问题"Doesaconstreferenceprolongthelifeofatemporary?",其中指出:Onlylocalconstreferencesprolongthelifespan.恐怕我的标准语不达标,不知道下面的foo是否是本地常量引用。我下面的conststd::string&foo是否延长了在调用get_or时创建的临时std::string函数参数的生命周期>,或者我是否有悬空引用?#include#includestructFoo{conststd::string&get_or(conststd::string&def){retu

javascript - Cast vs ToXXX for v8 中的值句柄

我将V8作为辅助语言嵌入到C++程序中。我检索到Handle来自V8,当我调用类似的东西时Handlevalue_handle=context->Global()->Get(key_handle);然后我可以发现它是(比方说)一个带有value_handle->IsString()的字符串.如果是这样,我可以将其转换为Handle访问其特定于字符串的方法。但似乎有两种方法可以做到这一点:Handlestring=value_handle->ToString();或Handlestring=Handle::Cast(value_handle);但是,对于数组和函数,没有toArray()

c++ - 我可以在布局兼容的标准布局类型之间合法地重新解释_cast 吗?

我正在写一个类,假设答案是Areenumerationtypeslayoutcompatiblewiththeirunderlyingtype?是"is",是布局兼容的structkevent但使用enumclasses用于filter、flags等.为相关领域提供适当的基础类型。它也是标准布局(字段都是private并且它们本身都是标准布局,没有virtual成员,没有基类)。根据我对n3690的阅读,我可以确定我的类和structkevent具有相同的值表示,但我在标准中看不到任何允许我这样做的内容reinterpret_cast在它们之间,尽管这似乎是对“值表示”的合理解释。这在

c++ - 是否有任何理由在 C 中声明 "volatile const"而在 C++ 中仅声明 "volatile"?

我在我的项目中使用的头文件具有以下定义:#ifdef__cplusplusextern"C"{#endif#ifdef__cplusplus#define__Ivolatile/*!__I在另一个头文件中使用如下:typedefstruct{//moremembersbefore__Iuint32_tCR;/*!我的问题是为什么__I在C中而不是在C++中成为常量?您仍然可以修改CR指向的值,因为您有地址,但我只是好奇为什么__I的定义不同。对于任何对它的用途或来源感兴趣的人,__I定义来自IAREmbeddedWorkbenchARMforCortex-M4,结构来自德州仪器LM4F

c++ - 将 std::unique_ptr 类成员标记为 const

许多使用std::unique_ptr来管理类依赖项所有权的示例如下所示:classParent{public:Parent(Child&&child):_child(std::make_unique(std::move(child))){}private:std::unique_ptr_child;};我的问题是将_child成员标记为const是否会产生意想不到的副作用?(除了确保不能在_child上调用reset()、release()等)。我问是因为我还没有在示例中看到它,也不知道这是故意的还是只是为了简洁/一般性。 最佳答案

c++ - 从右值到右值引用的 reinterpret_cast

只是一个简单的编译测试。gcc接受以下内容,而clang和msvc拒绝它:https://godbolt.org/z/DlUasLfloattest(){returnreinterpret_cast(0x7F800000);}按照标准,哪个是正确的? 最佳答案 此reinterpret_cast表达式寻求执行的转换不在转换列表中[expr.reinterpret.cast]reinterpret_cast可以执行[expr.reinterpret.cast]/1.0x7F800000是整数类型的文字。reinterpret_cast

c++ - 函数模板重载 : const* vs. const&

当我有两个这样的模板化函数重载时:templatevoidfoo(Tconst&){//dosomethingwithaconstreferencecoutvoidfoo(Tconst*){//dosomethingwithaconstpointercout为什么编译器在用非常量指针类型实例化时选择第一个版本?int*bar;foo(bar);//prints"constreferenceversion"charconst*baz;foo(baz);//prints"constpointerversion" 最佳答案 原因是因为ba

c++ - 可以通过 const 引用返回文字吗?

这样安全吗?constint&f(){return1;}我想做的是返回一个值给const& 最佳答案 这不行。返回对临时对象的引用是不行的,因为在函数外部访问它会导致未定义的行为。 关于c++-可以通过const引用返回文字吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6896334/

c++ - 在只有 const shared_ptr 的 unordered_set 中找到一个 shared_ptr?

我有一个unordered_set>us我想知道是否有针k在us,但是k类型为shared_ptr所以unordered_set>::find提示它无法转换。有解决办法吗?也许通过直接提供哈希?我试过const_cast(感觉很脏)但这并没有解决问题。 最佳答案 使用std::const_pointer_cast在这里是一个可能的解决方案。us.find(std::const_pointer_cast(k));因为您没有修改k,所以可以丢弃const。 关于c++-在只有constsha