void f(int* p) { int* p1 = std::assume_aligned<256>(p); // 用 p1 而非 p,以确保从对齐假设受益。 // 然而,若 p 未对齐则程序有未定义行为,无关乎是否使用 p1。 }交给程序员确保对齐假设确实成立。调用 assume_aligned 不导致编译器检查或强制这点。 功能特性测试宏值标准功能特性 __cpp_...
std::assume_aligned 定义于头文件<memory> template<std::size_tN,classT> [[nodiscard]]constexprT*assume_aligned(T*ptr); (C++20 起) 告知编译器ptr所指向的对象至少对齐到N。实现可用此信息生成更高效的代码,但仅会对通过assume_aligned的返回值进行的访问做此假设。
void f(int* p) { int* p1 = std::assume_aligned<256>(p); // 用 p1 而非 p ,以确保从对齐假设受益。 // 然而,若 p 未对齐则程序有未定义行为,无关乎是否使用 p1 。 } 交给程序员确保对齐假设确实成立。调用 assume_aligned 不导致编译器检查或强制这点。 C...
在 C++ 标准库中,std::transform() 是一个非常有用的算法函数,它能够将给定范围中的每个元素进行...
voidf(int*p){int*p1=std::assume_aligned<256>(p);// Use p1, not p, to ensure benefit from the alignment assumption.// However, the program has undefined behavior if p is not aligned// regardless of whether p1 is used.} It is up to the program to ensure that the alignment assumptio...