27得票4回答
如何转换sockaddr_storage并避免违反严格别名规则

我正在使用Beej's Guide to Networking,遇到了一个别名问题。他建议编写一个函数来返回特定结构的IPv4或IPv6地址:1 void *get_in_addr( struct sockaddr *sa ) 2 { 3 if (sa->sa_family...

20得票5回答
这段代码是否颠覆了C++类型系统?

我明白在C++中使用const方法意味着通过该方法对对象进行只读访问,但是对象在其他地方可能仍然会改变。 然而,这段代码似乎通过const引用(即通过const方法)更改了一个对象。 这段代码在C++中是否合法? 如果是:它是否破坏了类型系统的const属性?为什么或者为什么不? 如果...

17得票4回答
C语言中的嵌套结构体和严格别名问题

请考虑以下代码:typedef struct { int type; } object_t; typedef struct { object_t object; int age; } person_t; int age(object_t *object) { if (obj...

16得票1回答
数组指针别名 - 未定义行为?

以下代码是否会调用未定义行为(由于别名违规或其他原因)?int foo(int (*a)[10], int (*b)[5]) { (*a)[5]++; return (*b)[0]; } int x[10]; foo(&x, (int (*)[5])&x[5]...

11得票5回答
C++中避免别名问题(例如在将容器的元素添加到自身时)的"正确"方法是什么?

std::vector<int> a; a.push_back(1); a.push_back(a[0]); 我刚学到上面的代码可能非常危险。 (如果不明显,你并不孤单...对我来说也不明显。) 我的问题: 有没有更好的方法处理这个问题?新建一个变量然后立即将其分配给某些东西似乎...

10得票1回答
gcc C/C++假设没有指针别名问题

最近读到,Fortran在数值计算方面比C/C++更快的主要原因是不存在指针别名。 显然,使用restrict或__restrict__关键字可以逐个案例地指示给定内存元素的无指针别名。 ICC编译器显然有一个选项-fno-alias,它允许全局假定不存在别名。GCC上有-fno-stri...

10得票2回答
有没有类似于限制关键字的C++语言特性来指示_iterators_不是别名?

g++实现了指针的__restrict__,但我没有找到与迭代器有关的信息。我的总体意图是鼓励编译器将STL循环向量化。 编辑: 即使编译器无法进行向量化,__restrict__关键字也应该能够告诉编译器在循环内不需要进行不必要的重载。

8得票4回答
如何告诉 C 或 C++ 编译器指针是没有别名的

我有一个函数接收指针数组,像这样: void foo(int *ptrs[], int num, int size) { /* The body is an example only */ for (int i = 0; i < size; ++i) { ...

7得票2回答
在不安全的代码中,可变引用的别名处理是否正确?

在不安全代码中,只要这些可变引用(而非指针)未用于写入相同的索引,拥有多个对同一数组的可变引用是正确的吗? 背景 我想从不同的线程中生成底层数组的几个(不同的)可变视图,以便我可以修改它们。 如果不同的部分是连续的,那么这很简单,只需在切片上调用split_at_mut即可: let ...