gpt4 book ai didi

c++ - 警告 : cast from 'char *' to 'float *' increases required alignment from 1 to 4 [-Wcast-align]

转载 作者:太空宇宙 更新时间:2023-11-04 15:56:36 26 4
gpt4 key购买 nike

有没有办法让我使用 c++11 关键字 alignas装饰函数get() .在某些情况下,我知道 get() 返回的缓冲区将包含正确对齐的浮点缓冲区。

代码:

$ cat c.cxx
extern char* get();

void foo()
{
float *f = (float*)get();
}

导致

$ clang++-8 -Wcast-align -c c.cxx
c.cxx:5:14: warning: cast from 'char *' to 'float *' increases required alignment from 1 to 4 [-Wcast-align]
float *f = (float*)get();
^~~~~~~~~~~~~
1 warning generated.

引用函数char* get() ,只需返回 &v[0]std::vector<char>根据内部类型,它可能包含字节缓冲区或浮点缓冲区(变体)。

最佳答案

我建议不要使用 C 风格的强制转换,而应使用 reinterpret_cast。这也具有消除警告的好特性。

但是,要正确回答您的问题:

从 C++20 开始,您可以使用 std::assume_aligned像这样:

extern char* get();

void foo()
{
float *f = (float*)std::assume_aligned<alignof(float)>(get());
}

Pre C++20,您还可以使用不可移植的编译器内在函数:

extern char* get();

void foo()
{
float *f = (float*)__builtin_assume_aligned(get(), alignof(float));
}

关于c++ - 警告 : cast from 'char *' to 'float *' increases required alignment from 1 to 4 [-Wcast-align],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56256431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com