这是两个非常相似的片段:
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/