问题标签 [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.
c++ - 为什么我不能在 char * 和 unsigned char * 之间进行静态转换?
显然编译器认为它们是不相关的类型,因此reinterpret_cast
是必需的。为什么这是规则?
c++ - 尽管切片,为什么 static_cast 仍然可以使用空指针?
如果我们使用多重继承,切片将使父对象的地址与叶对象的地址不同:
所以如果我们有一个Z
对象z
,它的地址&z
不会和它的Y
父地址重合:static_cast<Y*>(&z)
比 . 高四个字节&z
。
好处static_cast
是它是静态的,所以不占用运行时间(与 相比dynamic_cast
)。但是,如果我们有一个Z*
指向 的0
,那么每个对父级的强制转换也应该并且确实会产生一个空指针。为什么这个工作以及它是如何实施的?这是否意味着每一个都static_cast
引入了一个分支指令?
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。
c++ - 为什么我需要 reinterpret_cast 将 Fred ** const 转换为 void ** const?
我有一个指向 a 的指针的 const 指针,但Fred
我不明白为什么 astatic_cast
还不够。
请有人可以解释为什么reinterpret_cast
需要将指针转换为Fred*
指针,void*
但static_cast
将指针转换为指针就Fred
可以了void
。
c++ - 为什么使用 static_cast 运算符的不安全强制转换不会崩溃?
考虑以下示例代码。
在 Line1 中,我将派生类对象的地址传递给函数dummy
,该函数接受一个指向基类对象的指针。所以static_cast
函数中的 indummy
是安全的。
在 Line2 中,我将基类对象的地址传递给函数。所以static_cast
in 函数dummy
是不安全的。
但是当我执行代码时,程序运行正常。我想,按这个词not safe
,程序应该在运行时崩溃。但没有发生崩溃。
这是我得到的输出。
程序在运行时没有崩溃的原因是什么?
c++ - 默认参数值中的 static_cast
我想要一个带有默认参数 static_cast 的构造函数,例如:
在哪里
并且func_double_double_t
是许多与此类似的函数对象的基类。
GCCstatic_cast
对上述构造函数说“无效”。有没有办法实现这种行为?
c++ - 在 C++ 中替换删除,错误信息
我正在尝试(并已解决)包含 SSE 优化成员的类的 16 字节对齐问题。但困扰我的是我在网上找到的大部分示例都包含一行代码,在我看来这些代码完全是多余的,但在许多地方却重复出现。
有问题的行是
由于 pC 从未被引用并且在函数末尾超出范围,那么这样做有什么意义呢?我试过把这条线拿出来,它似乎根本没有什么区别,但这条线出现在很多例子中!我是否遗漏了一些非常明显的东西,或者是否有异常的代码行被盲目地从一个示例复制到另一个示例,并在许多“教程”中变得普遍?
c++ - C ++如何设置std :: vector类型的指针到 std::vector 类型的对象
的背景:
我正在用 C++ 构建一个物理引擎,它计算笛卡尔空间中 n 体系统的引力演化,然后将其转换为任何预定义的坐标系。最终目标是使起始坐标系任意(在坐标系“n”中计算,而不仅仅是笛卡尔坐标系),但这是一个遥远的目标。
问题:
因为坐标系应该是可互换的,所以我让笛卡尔坐标系扩展了一个基本坐标系:
尝试创建指向类型std::vector<Particle*>
成员对象的类型指针时会出现错误std::vector<CoordMember*>
:
编译器错误是:
在这一点上,我知道其中的数据state->members
都是 type的事实Particle*
。我不知道要做什么才能使这个演员成为可能。有任何想法吗?
tl;博士:
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.
gcc - static_cast / float / bitset / const 怪异
就在几个小时前,出现了以下问题:变量不能出现在常量表达式中
幸运的是,提供的答案确实解决了他的问题,但我无法重现该解决方案。
我试图进一步简化代码,现在我陷入了以下困境:
如果使用 编译-pedantic
,则编译器接受第一个示例,但带有除法(但显然相同的数字)的示例被拒绝,并显示消息“length_2 不能出现在常量表达式中”。
没有-pedantic
和有-pedantic -std=c++0x
它被接受,没有任何进一步的警告。
这是完整的输出g++ -v
(我为德语道歉,但我相信无论如何你都会得到正确的信息):
这种行为的原因是什么?我猜它1.0f
被认为是一些特殊的常数,因此改变了 static_cast 的行为?