12得票4回答
为什么我需要使用reinterpret_cast将Fred ** const转换为void ** const?

我有一个指向 Fred 指针的常量指针,但我不明白为什么 static_cast 不足以满足要求。typedef struct { int n; } Fred; Fred *pFred; Fred **const ppFred = &pFred; void **const p...

11得票2回答
reinterpret_cast把输入转换成std::unique_ptr永远不是完全安全的吗?

当使用具有可变大小结构(必须分配为byte[],然后转换为struct的结构)的各种API时,如果unique_ptr holder可以指向该结构,那么将会很好,因为这就是我们将要使用的内容。 示例:std::unique_ptr<VARIABLE_SIZE_STRUCT[]> ...

11得票1回答
使用指针将char*转换为unsigned char*的强制类型转换

我正在编写一些使用fstream read()函数的代码,该函数期望一个char*作为缓冲区。稍后,我希望使用该缓冲区中的字节作为无符号字符进行操作,因此我要么:1. 声明缓冲区为char*,然后稍后对每个元素进行static_cast 2. 声明缓冲区为unsigned char*,然后在将...

11得票3回答
C++对象布局是否必须静态定义?

更具体地说,假设B是可访问的基类A,下面的代码是否产生未定义行为,并且按照标准,断言是否保证不会触发?void test(B b1, B b2) { A* a2 = &b2; auto offset = reinterpret_cast<char*>(a2) - r...

11得票4回答
C++11:将结构体数组重新解释为结构体成员数组

考虑以下类型:struct S { char v; }; 给定一个由const S组成的数组,是否有可能以符合标准的方式将其重新解释为const char数组,其中它的元素对应于每个原始数组元素的成员v的值,反之亦然?例如:const S a1[] = { {'a'}, {'4'}, ...

11得票2回答
不使用std::launder,将std::aligned_storage*重新解释为T*是否违反了严格别名规则?

下面的例子来自于cppreference.com的std::aligned_storage页面:(链接) #include <iostream> #include <type_traits> #include <string> template<c...

11得票1回答
将指针向量重新解释为常量指针向量是否安全?

这种类型转换是否安全?vector<int*> a; const vector<const int*>& b = reinterpret_cast<const vector<const int*>&>(a); 在这种情况下,静态转...

11得票1回答
static_cast和reinterpret_cast用于std::aligned_storage吗?

请问有人能解释一下关于类型转换的代码吗?具体在http://en.cppreference.com/w/cpp/types/aligned_storage中。 以下代码可以吗: return *static_cast<const T*>(static_cast<const...

11得票4回答
一个适当定义的联合和reinterpret_cast之间有什么区别?

你能提出至少一个场景,在这个场景中,两种技术之间有显著的差异吗? union { T var_1; U var_2; } 并且 var_2 = reinterpret_cast<U> (var_1) 我越想越觉得它们从实际角度看起来是一样的。 我发现的一个区别是,虽...

10得票6回答
我能否在不进行复制的情况下将std :: vector <char>重新解释为std :: vector <unsigned char>?

我有一个指向std::vector&lt;char&gt;的引用,我想将其作为参数传递给一个接受std::vector&lt;unsigned char&gt;的函数。 我能在不复制的情况下做到这一点吗? 我有以下函数并且它可以正常工作; 但是我不确定是否实际上发生了复制-有人可以帮助我理解...