gpt4 book ai didi

c++ - 原始引用之间的 static_cast

转载 作者:行者123 更新时间:2023-11-30 02:35:26 27 4
gpt4 key购买 nike

是否使用 static_castconst unsigned char& 转换为 const unsigned long long& 已定义?

constexpr unsigned char arr[sizeof(unsigned long long)]{ 1 };
constexpr bool value = static_cast<const unsigned long long&>(arr[0]) == 1;

放入 int main(){},这在 Coliru、Ideone 和 VS2015 上编译时没有错误或警告。这实际上是安全的,还是不安全但不需要报错?

奖励:我没想到 arr[0] 会是常量表达式,但是使用 value 作为常量表达式可以正常工作。是因为arr是数组吗?

最佳答案

* 它是未定义的,因为您正在通过对另一种类型的引用来使用一种类型。* 您使用了强制转换,因此如果编译器可以执行该强制转换,它应该信任您。* 它通常会按照您似乎期望的方式工作,除了我怀疑大多数架构上的值(value)是否真实。

实际上我认为这里发生的是你转换到的 const& 被绑定(bind)到一个临时的,或者如果它发生在运行时。所以是的,您应该从值中得到 1char 1 将被复制到 unsigned long long 中,const& 将绑定(bind)到它。我不认为它不会绑定(bind)到您创建的数组。这将是完全安全的,您可以忽略上面的大部分内容。

您可以通过尝试转换为左值来稍微测试一下这个想法。不过,您不必让数据成为 constexpr

http://ideone.com/TxYose

关于c++ - 原始引用之间的 static_cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33619134/

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