10得票6回答
C++将类型转换为较小大小的数组

这是一个关于C++语言的各种怪癖的有趣问题。我有一对函数,它们应该用矩形的角来填充一个点数组。有两个重载版本:一个使用Point[5],另一个使用Point[4]。5个点的版本是指封闭多边形,而4个点的版本是当你只想要4个角时使用。 显然这里有一些重复的工作,所以我想能够使用4个点的版本来填...

10得票2回答
reinterpret_cast 何时会修改位?

根据C++标准: 5.2.10.3 reinterpret_cast执行的映射可能会产生与原始值不同的表示。 我在这个网站上接受的培训使我相信并重复这一点。(即使这可能只是琐事)从float *到int *的reinterpret_cast允许产生不同的位模式。唯一的保证...

10得票1回答
使用reinterpret_cast在内存映射中遇到未定义行为的处理方式

为了避免复制大量数据,最好使用mmap映射二进制文件并直接处理原始数据。这种方法有几个优点,包括将页面置于操作系统中。不幸的是,我的理解是,明显的实现会导致未定义行为(UB)。 我的用例如下:创建一个包含一些头部标识格式并提供元数据(在本例中仅为double值的数量)的二进制文件。文件的其余...

10得票1回答
关于类成员访问与"(strict) aliasing violation"术语的关系问题

这个问题涉及到当前的C++20草案。引用的段落已经与以前的标准版本稍有修改,但就我所知,并没有涉及相关方面。 我希望对"别名违规"或"严格别名违规"这些术语有所澄清。 我的先前印象是,这些术语特指违反标准段落[basic.lval]/11的情况: 如果程序尝试通过一个glvalue访问对...

9得票2回答
reinterpret_cast对于几乎所有POD数据类型是否足够支持布局兼容性

我正在学习 static_cast 和 reinterpret_cast 相关的知识。 如果我没记错的话,标准(9.2.18)说 reinterpret_cast 用于 pod 数据是安全的: 使用 reinterpret_cast 适当转换后的指向 POD-struct 对象的指针指向...

9得票1回答
将一个指向成员函数的指针转换为同一类中的另一个指针

使用 reinterpret_cast 将指向同一类的成员函数指针转换为另一个成员函数指针是否合法?以下示例可正常工作,但它是否合法? #include<iostream> #include<vector> #include<string> class ...

9得票1回答
reinterpret_cast和static_cast在标准布局类型中写入字节时有何区别?

我需要写入某些整数类型的单个字节。我应该使用reinterpret_cast,还是应该通过void*使用static_cast? (a) unsigned short v16; char* p = static_cast<char*>(static_cast<void*&...

9得票4回答
我应该使用C++的reinterpret_cast还是C风格的cast?

我有以下的模板函数,可以将任何标准类型的数据转储到二进制输出流中。 template<typename T> static void dump ( const T& v, ostream& o ) { o.write ( reinterpret_cast&...

9得票2回答
地址、reinterpret_cast 和多重继承

有人能解释以下代码的行为吗? 为什么在第一种情况下,即b2 == &d为真时,我们有b = 3? 为什么在第二种情况下是可以的?我已经打印了b2和d的地址,它们是不同的。 #include <iostream> using namespace std; clas...

9得票3回答
reinterpret_cast(或任何类型转换)能够将xvalue转换为lvalue吗?

以下代码是否符合C++11和/或C++14标准? #include <iostream> #include <utility> using namespace std; void foo(int &a) { cout << a <...