相关疑难解决方法(0)

我是否施放了malloc的结果?

这个问题,有人建议意见,我应该不会投的结果malloc,即

int *sieve = malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)

而不是:

int *sieve = (int *) malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?

c malloc casting

2318
推荐指数
27
解决办法
22万
查看次数

什么是严格别名规则?

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

c strict-aliasing undefined-behavior type-punning

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

*(&arr + 1) - arr 如何给出数组大小

int arr[] = { 3, 5, 9, 2, 8, 10, 11 };      
int arrSize = *(&arr + 1) - arr;
std::cout << arrSize;
Run Code Online (Sandbox Code Playgroud)

我不知道这是如何工作的。所以任何人都可以帮助我解决这个问题。

c++ arrays

36
推荐指数
4
解决办法
3430
查看次数

std :: array位是否与旧的C数组兼容?

是底层位表示一个std::array<T,N> vT u[N]一样的吗?

换句话说,将N*sizeof(T)字节从一个复制到另一个是否安全?(通过reinterpret_castmemcpy.)

编辑:

为了澄清,重点是相同的位表示reinterpret_cast.

例如,假设我将这两个类放在一些简单的可复制类型上T,对于某些类N:

struct VecNew {
    std::array<T,N> v;
};

struct VecOld {
    T v[N];
};
Run Code Online (Sandbox Code Playgroud)

还有遗留功能

T foo(const VecOld& x);
Run Code Online (Sandbox Code Playgroud)

如果表示相同,则此调用是安全的并且避免复制:

VecNew x;
foo(reinterpret_cast<const VecOld&>(x));
Run Code Online (Sandbox Code Playgroud)

c++ memcpy reinterpret-cast c++11

33
推荐指数
5
解决办法
4727
查看次数