以 c++11 样式键入转换的正确方法
Correct way to type casting in c++11 style?
我有这样的类:
class A {
void init(int a){
_data.resize(a); //! (1)
}
//other parts of the code are not important ...
private:
std::list<std::vector<double>> _data;
}
在(1)中,我收到带有文本的警告:
implicit conversion from int to size_type(aka unsigned long)
我想知道摆脱该警告的正确方法是什么?也许是这样的:
_data.resize(static_cast<decltype(_data)::size_type>(a)
注意:我想代码应该更改为:
init(size_t a)
但是让我们假设我们不能更改类接口。
您的示例强制转换以正确的方式执行此操作:
- 它明确表示有意投射。
- 它强制转换为正确的类型,并受到保护,不会在将来发生
_data
类型更改。 - 它使用正确的演员阵容。
所以坚持下去,如果改变界面是不可能的。
最好在使用输入之前为输入添加健全性检查。在将其转换为无符号之前检查负值是最基本和最有用的方法。
最正确的方法是如你所说:
_data.resize(static_cast<decltype(_data)::size_type>(a));
但是最大的问题是签名与unsigned
,你说你被int
困住了,所以你使用:
_data.resize(static_cast<unsigned int>(a));
就这么简单:
_data.resize(std::size_t(a));
像这样疯狂:
_data.resize(static_cast<std::size_t>(a));
还支持 C 样式转换:
_data.resize((std::size_t)a);
相关文章:
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 将方法转换为调用该方法的成员函子对象会导致崩溃
- 是否有内置方法可以强制转换为不同的基础类型,但保留常量限定符?
- C++ 将静态方法转换为简单方法
- C++方法转换为 C#
- 将"this"从父类方法转换为子类方法是一种好的做法吗?
- C++方法转换为 C# 时出现问题
- 如何将 C 中声明的可选参数方法转换为 c++
- 需要一些帮助将C#方法转换为C
- 如何将某些C++方法转换为 C# 调用
- 如何将带有VARIANT的C++方法转换为不带VARIANT的C#
- android NDK --将C++方法转换为Java MTHOD
- 消息传递从c++方法转换成Objective-C方法
- 我可以将方法转换为LPTHREAD_START_ROUTINE吗?
- 将指针从派生类方法转换为基类
- 将简单的python方法转换为c++
- 我如何将一些类的指针方法转换为指针函数
- Resharper C++中是否有将函数/方法转换为尾部返回类型的选项
- 将 java 方法转换为 cpp
- 将C#方法转换为C++方法