相关疑难解决方法(0)

什么是严格别名规则?

当询问C中常见的未定义行为时,灵魂比我提到的严格别名规则更加开明.
他们在说什么?

c strict-aliasing undefined-behavior type-punning

778
推荐指数
10
解决办法
19万
查看次数

C++成员变量别名?

我很确定这是可能的,因为我很确定我已经看到它完成了.我认为这很棒,但我很乐意接受"这是一个可怕的想法,因为____"的答案.

假设我们有一个基本结构.

struct vertex
{
    float x, y, z;
};
Run Code Online (Sandbox Code Playgroud)

现在,我想在这些变量上实现别名.

vertex pos;
vertex col;
vertex arr;

pos.x = 0.0f; pos.y = 0.5f; pos.z = 1.0f;
col.r = 0.0f; col.g = 0.5f; col.b = 1.0f;
arr[0] = 0.0f; arr[1] = 0.5f; arr[2] = 1.0f;
Run Code Online (Sandbox Code Playgroud)

理想情况下,第三种语法与数组无法区分.也就是说,如果我arr作为参考参数发送给期望其将存储数据的浮点数组的函数(例如许多OpenGL glGet函数),它将正常工作.

你怎么看?可能?可能但很愚蠢?

c++ variables alias struct member

12
推荐指数
3
解决办法
2万
查看次数

可以将连续放置在内存中的变量视为数组的一部分吗?

我正在编写一个使用 C++ 进行计算的应用程序,然后使用 pybind11 将多维结果作为 numpy 数组返回。从pybind的文档和在线看到的示例来看,numpy 数组创建基本上是传递数据数组的指针并包含步幅的详细信息。然而,在 C++ 部分,我并不热衷于使用一维array和使用一些花哨的索引,但我宁愿使用结构。这让我思考是否可以将放置在连续内存中的(同质)变量视为array.

我的思路如下。an 的元素array被放置在连续内存中。a 的元素struct也按其声明的顺序连续放置(当不涉及填充时)。因此,从内存放置的角度来看,以下四个变量声明是相同的,例如,如果我要指向第一个元素的指针,那么我可以通过一次执行一个整数值的步骤来遍历所有元素:

struct struct_array
{
    int elem[4] = {};
};

struct struct_ints
{
    int a = {};
    int b = {};
    int c = {};
    int d = {};
};

// integer matrix of shape 3x4
int one_dim_array[3 * 4] = {};
int two_dim_array[3][4] = {};
struct_array array_of_struct_arrays[3] = {};
struct_ints array_of_struct_ints[3] = {};
Run Code Online (Sandbox Code Playgroud)

这是我的测试代码,表明我的问题的答案是肯定的。它执行一些地址打印、设置和读取元素。

#include <iostream> …
Run Code Online (Sandbox Code Playgroud)

c++ memory arrays pybind11

2
推荐指数
1
解决办法
71
查看次数