gpt4 book ai didi

c++ - 缩小转换差异

转载 作者:行者123 更新时间:2023-11-28 01:46:35 25 4
gpt4 key购买 nike

g++和clang都可以编译

std::vector<int> xs{1, 2, 3u};

但是编译不行

std::vector<int> xs{1, 2, 3.0};

这个看似奇怪的选择背后的基本原理是什么?

如果我们考虑最后一个值的类型unsigneddouble 都不能安全地转换为int,如果我们改为考虑特定文字值,则 3u3.0 都可以安全地转换。

那为什么要区分呢?

正式规范说,如果可以表示值,则允许从整数或枚举到不同的 it 的转换,甚至允许从丢失数据的文字(例如 double float )。有趣的是,这导致:

 std::vector<float> x{1073741824};  // ok, value can be represented
std::vector<float> y{1073741823}; // not ok, narrowing
std::vector<float> z{1073741823.}; // ok (even if loses precision!)
std::vector<int> w{3.0}; // not ok, just because

最佳答案

关于c++ - 缩小转换差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44799383/

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