이 두 기능을 고려char 배열을 다른 유형으로 캐스팅하는 것이 엄격한 앨리어싱 규칙을 위반합니까?
int f1()
{
alignas(int) char buf[sizeof(int)] = {};
return *reinterpret_cast<int*>(buf);
}
int f2()
{
alignas(int) char buf[sizeof(int)] = {};
char* ptr = buf;
return *reinterpret_cast<int*>(ptr);
}
GCC는 첫 번째는 엄격한 앨리어싱 규칙을 위반 한 것으로 경고하고있다. 그러나 두 번째는 OK입니다.
Clang은 불만없이 모두 허용합니다.
경고가 합법적입니까?
예. 여기서 "객체"는'char' 또는'char's의 배열이고 glvalue는'int' 타입입니다; https://timsong-cpp.github.io/cppwp/basic.lval#8의 내용은이 사례를 다룹니다. –