我正在查看这个,我想知道是否使用reinterpret_cast将对象转换为其第一个成员,并在C++中使用该结果是否安全。
假设我们有A类、B类和B的实例B:
class A{
public:
int i;
void foo(){}
};
class B{
public:
A a;
};
B b;
问题1:使用b.a .像这样:reinterpret_cast<A*>(&b)->foo()**?** 安全吗?
注意:在一般情况下,我们假设类及其成员都是标准布局。
我在上对可用参考资料的演讲告诉我,这种用法应该被授权,因为没有别名违规,但是它
我有一个项目,其中我有一个基类,它有一个未赋值的函数指针数组。我已经创建了一个小的代码示例,它基本上捕获了我正在尝试做的事情: class base_class;
class derived_class;
using funcPtr = void (base_class::*)();
//using funcPtr2 = void (derived_class::*)(); <- I could use this instead, but the base class shouldn't know that the derived class exists...
class
我能够将vector<void*>的类型引用转换为vector<Foo*>的引用,而不能输入vector<void*> to vector<Foo*>的类型。我得到了错误C2440:'reinterpret_cast‘:无法从'std::vector<_Ty>’转换为'std::vector<_Ty>‘为什么?
而且,我能够在没有编译器错误的情况下将void*类型转换为Foo*。
void* g =&foo;
reportFooVector2(reinterpret_cast<Foo*
我们在工作的时候打代码高尔夫。这样做的目的是保留to_upper的签名,并将所有参数返回给upper。我的一位同事提出了这个丑陋而聪明的代码:
#include <iostream>
#include <memory>
#include <stdexcept>
#include <string>
std::string operator+(std::string_view& a, int const& b) {
std::string res;
for (auto c : a) {
res += (c - b)
我是C++的初学者,我在理解一些代码时遇到了问题。
我有一个练习要做,写一个返回int大小的函数,并且不使用sizeof()和reinterpret_cast。有人给了我解决方案,但我不明白它是如何工作的。你能帮我理解一下吗?代码如下:
int intSize() {
int intArray[10];
int * intPtr1;
int * intPtr2;
intPtr1 = &intArray[1];
intPtr2 = &intArray[2];
//Why cast int pointer to void pointer?
void*
考虑到以下条件:
struct A
{
int a;
};
struct B
{
int b;
};
int main()
{
A a {1};
A* p = &a;
使用static_cast和reinterpret_cast通过void*进行铸造会产生同样的效果吗?也就是说,下面的表达式有什么区别吗?
static_cast <A*> ( static_cast <void*> (p) );
reinterpret_cast <A*> ( reinterpret_cast
给定以下代码
class T {
public:
virtual ~T () {}
virtual void foo () = 0;
};
class U {
public:
U() {}
~U() {}
void bar () { std::cout << "bar" << std::endl; }
};
class A : public U, public T {
public:
void foo () { std::cout