c++ - 我应该在赋值和返回语句中使用 static_cast 吗?为什么?

标签 c++ casting static-cast

这是两个非常相似的片段:

vector<int> a;
int n = static_cast<int>(a.size());
// ---------
int f(const vector<int>& a) {
    return static_cast<int>(a.size());
}

这里我显式地将类型size_t 的值转换为类型int。如果我省略 static_cast,则隐式应用相同的转换。

这种隐式转换属于哪种类型?在显式赋值和返回语句中省略 static_cast 是否安全?

最佳答案

这将是一个积分转换。并且缩小范围。

对于变量初始化,如果你想要一个特定的类型,一个好的方法是按照 Herb Sutter 在他的“Almost Always Auto”中的建议 GotW article :

auto n = int{a.size()};

尽可能使用列表初始化。它将阻止缩小转换,并且编译器会在需要时将您标记为使用显式强制转换(例如上述情况)。

关于c++ - 我应该在赋值和返回语句中使用 static_cast 吗?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46264019/

相关文章:

c++ - 在 C/C++ 中获取 Linux 中的磁盘标签

当值的数字以字符串结尾时 MySQL 结果问题

c++ - static_cast 被滥用了吗?

C++ 转换 : have pointer to object member, 计算指向对象的指针

c++ - 无法将法线添加到 .obj 网格

c++ - 当 std::vector 增长时,其中元素的地址是否不再有效?

c++ - 如何实现一个 REST API 服务器?

c++ - 为什么C++不允许(自动)强制转换?

sql - 如何在 postgresql 中将 CHAR 转换为 TIME

static_cast< > 中的 C++ 编译错误