gpt4 book ai didi

c++ - 将 float* 转换为 std::complex* 是否合法

转载 作者:可可西里 更新时间:2023-11-01 18:37:47 24 4
gpt4 key购买 nike

N3797 26.4 [complex.numbers] 说这是关于类型转换 std::complex<T>*T*

4 Moreover, if a is an expression of type cv std::complex<T>* and the expression a[i] is well-defined for an integer expression i, then:
- reinterpret_cast<cv T*>(a)[2*i] shall designate the real part of a[i], and
- reinterpret_cast<cv T*>(a)[2*i + 1] shall designate the imaginary part of a[i].

这(或标准的其他措辞)是否意味着我可以 reinterpret_cast另一种方法?我可以这样做吗:

    float * pf;
std::complex<float>* pc = reinterpret_cast<std::complex<float>*>(pf);
pc[i].real();

作为 n.m.下面指出,我必须确保 pf 的对齐适用于 std::complex<float> .这可以假定已得到处理。

最佳答案

不,该条款不提供此类保证。

现在,在实践中,最常见的问题是对齐:但即使这样也可能很少见。

第二个问题涉及严格的别名,编译器可以假定分配为 double 的内存不会被涉及其他类型指针的任何操作修改(char )。上面的限制是相反的(一个 complex 分配的指针可能不会假设 double* 不指向它的数据),但不是你想要的方向.同样,这相对晦涩难懂,但编译器可以使用它来重新排序代码中的写入。

但是,它通常会起作用。更常见的是,如果你对齐它,并且你的编译器不使用严格的别名假设:然而,即使那样它也是标准未定义的行为。

关于c++ - 将 float* 转换为 std::complex<float>* 是否合法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23198943/

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