问题标签 [static-cast]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
45819 浏览

c++ - 为什么我不能在 char * 和 unsigned char * 之间进行静态转换?

显然编译器认为它们是不相关的类型,因此reinterpret_cast是必需的。为什么这是规则?

0 投票
1 回答
832 浏览

c++ - 尽管切片,为什么 static_cast 仍然可以使用空指针?

如果我们使用多重继承,切片将使父对象的地址与叶对象的地址不同:

所以如果我们有一个Z对象z,它的地址&z不会和它Y父地址重合:static_cast<Y*>(&z)比 . 高四个字节&z

好处static_cast是它是静态的,所以不占用运行时间(与 相比dynamic_cast)。但是,如果我们有一个Z*指向 的0,那么每个对父级的强制转换也应该并且确实会产生一个空指针。为什么这个工作以及它是如何实施的?这是否意味着每一个都static_cast引入了一个分支指令?

0 投票
2 回答
11658 浏览

c++ - C++ 与 static_cast 和“this”对象的 const_cast 添加 const-ness 的区别?

根据 Scott Meyers 的说法,为了防止在 getter 的 const 版本和 getter 的非常量版本中重复代码,请从非常量版本调用方法的 const 版本:static_cast<const A&>(*this).Methodology(); 但是,由于过度热心而意外使用我输入了 Visual Assist X Intellisense:const_cast<const A&>(*this).Methodology();它工作得很好。

在这种情况下,使用特定演员表有什么区别?

使用的 IDE:Visual Studio 2010。

0 投票
4 回答
640 浏览

c++ - 为什么我需要 reinterpret_cast 将 Fred ** const 转换为 void ** const?

我有一个指向 a 的指针的 const 指针,但Fred我不明白为什么 astatic_cast还不够。

请有人可以解释为什么reinterpret_cast需要将指针转换为Fred*指针,void*static_cast将指针转换为指针就Fred可以了void

0 投票
2 回答
1555 浏览

c++ - 为什么使用 static_cast 运算符的不安全强制转换不会崩溃?

考虑以下示例代码。

在 Line1 中,我将派生类对象的地址传递给函数dummy,该函数接受一个指向基类对象的指针。所以static_cast函数中的 indummy是安全的。

在 Line2 中,我将基类对象的地址传递给函数。所以static_castin 函数dummy是不安全的。

但是当我执行代码时,程序运行正常。我想,按这个词not safe,程序应该在运行时崩溃。但没有发生崩溃。

这是我得到的输出。

程序在运行时没有崩溃的原因是什么?

0 投票
1 回答
436 浏览

c++ - 默认参数值中的 static_cast

我想要一个带有默认参数 static_cast 的构造函数,例如:

在哪里

并且func_double_double_t是许多与此类似的函数对象的基类。

GCCstatic_cast对上述构造函数说“无效”。有没有办法实现这种行为?

0 投票
2 回答
216 浏览

c++ - 在 C++ 中替换删除,错误信息

我正在尝试(并已解决)包含 SSE 优化成员的类的 16 字节对齐问题。但困扰我的是我在网上找到的大部分示例都包含一行代码,在我看来这些代码完全是多余的,但在许多地方却重复出现。

有问题的行是

由于 pC 从未被引用并且在函数末尾超出范围,那么这样做有什么意义呢?我试过把这条线拿出来,它似乎根本没有什么区别,但这条线出现在很多例子中!我是否遗漏了一些非常明显的东西,或者是否有异常的代码行被盲目地从一个示例复制到另一个示例,并在许多“教程”中变得普遍?

0 投票
1 回答
227 浏览

c++ - C ++如何设置std :: vector类型的指针到 std::vector 类型的对象

的背景:

我正在用 C++ 构建一个物理引擎,它计算笛卡尔空间中 n 体系统的引力演化,然后将其转换为任何预定义的坐标系。最终目标是使起始坐标系任意(在坐标系“n”中计算,而不仅仅是笛卡尔坐标系),但这是一个遥远的目标。

问题:

因为坐标系应该是可互换的,所以我让笛卡尔坐标系扩展了一个基本坐标系:

尝试创建指向类型std::vector<Particle*>成员对象的类型指针时会出现错误std::vector<CoordMember*>

编译器错误是:

在这一点上,我知道其中的数据state->members都是 type的事实Particle*。我不知道要做什么才能使这个演员成为可能。有任何想法吗?

tl;博士:

0 投票
2 回答
4112 浏览

c++ - casting to void* to pass objects to pthread in c++

I'm a little confused about how to pass an object to the pthread_create function. I've found a lot of piecemeal information concerning casting to void*, passing arguments to pthread_create, etc., but nothing that ties it all together. I just want to make sure I've tied it all together and am not doing anything stupid. Let's say I have the following thread class: Edit: fixed mis-matched static_cast.

To clarify, the data in the ProtectedBuffer class can only be accessed with methods like ProtectedBuffer::push_back(int arg), which use mutexes to protect the actual data.

My main question is: am I using static_cast correctly? And my secondary question is do I need that first line in virtual void *thread_routine(void *arg) where I copy the passed void pointer to a pointer to ProtectedBuffer?

Also, if I've done anything else that might cause problems, I'd appreciate hearing it.

0 投票
1 回答
805 浏览

gcc - static_cast / float / bitset / const 怪异

就在几个小时前,出现了以下问题:变量不能出现在常量表达式中

幸运的是,提供的答案确实解决了他的问题,但我无法重现该解决方案。

我试图进一步简化代码,现在我陷入了以下困境:

如果使用 编译-pedantic,则编译器接受第一个示例,但带有除法(但显然相同的数字)的示例被拒绝,并显示消息“length_2 不能出现在常量表达式中”。

没有-pedantic和有-pedantic -std=c++0x它被接受,没有任何进一步的警告。

这是完整的输出g++ -v(我为德语道歉,但我相信无论如何你都会得到正确的信息):

这种行为的原因是什么?我猜它1.0f被认为是一些特殊的常数,因此改变了 static_cast 的行为?