uint32_t和int32_t之间存在隐式转换.发现我不能说:我有点惊讶:
void somefunc(std::set<uint32_t> arg);
std::set<int32_t> ary1;
somefunc(ary1);
Run Code Online (Sandbox Code Playgroud)
为什么是这样?有没有一个简短的语法来做到这一点,而没有写出一个for循环将第一个int32_t数组复制到一个临时的uint32_t数组?
谢谢.
标准容器通常可以使用来自其他容器的范围来构造,这些容器由成对的迭代器指定.请考虑以下示例:
#include <cstdint>
#include <set>
void foo(std::set<uint32_t> arg) {}
int main()
{
std::set<int32_t> x;
foo({ x.begin(), x.end() });
}
Run Code Online (Sandbox Code Playgroud)
foo期待一个std::set<uint32_t>但是x是一个std::set<int32_t>.{x.begin(), x.begin()}正在创建一个std::set<uint32_t>复制所有值的新临时文件x.它与std::set<uint32_t>(x.begin(), x.end())您在旧代码中可能会发现的类似.如果包含的元素兼容,这也适用于不同类型的容器.
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |