c++中的手动或自动类型转换
manual or automatic type casting in c++
我想知道,如果我使用static_cast而不是让编译器发现一个对象是否可以被强制转换并自己执行,它可能会花费更少的编译时间吗?大约3000行c++代码。例如:
stack< const something*> myStack;
// ...
myStack.push(/* not const */ something*)
vs。
stack< const something*> myStack;
// ...
myStack.push(static_cast< const something*>(something*)).
我在大学里学过ada语言,从那以后我就有点困惑了,到底是应该进行类型转换还是让编译器来做
这里不需要static_cast<>
,因为正如您所猜测的,编译器将自己执行限定转换。
它只会使你的(有效的)代码不必要地更难阅读,所以我不会使用它。当我阅读static_cast<>
时,我期望有一些相关的事情发生,需要 cast,一些引起我注意的事情,需要我去弄清楚发生了什么以及为什么。这就像一个假警报。
希望您的代码易于阅读和干净。
如果你有编译时间的问题,我个人不会为这种微优化而烦恼——它们可能会增加编译时间(毕竟,编译器首先需要检查static_cast
是否合法)。相反,考虑一下你是否可以重新考虑你的类的设计和它们之间的依赖关系——没有看到它们就不能给出具体的建议。
不,它不会节省编译时间。
要找出原因,请考虑:
auto i = /* some expr */;
和
int i = /* some expr */;
在这两种情况下,编译器需要做的第一件事是计算some expr
的类型。然后,在auto
的情况下,它将简单地认为基本类型是i
的类型,在第二种情况下,如果基本类型不是int
,它将检查是否存在有效的转换。
同样的事情发生在你的情况下,无论你是否显式指定类型,编译器必须计算表达式的类型,必须检查发生的转换是否被允许(无论是否隐式)。
你没有帮助,因此,你使你自己和你的同事的代码变得不那么可读。
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++中的双指针类型转换
- 逐位操作的隐式类型转换
- 模板中的类型转换
- 在 C++(和 C)中进行类型转换时明显不一致
- 字符类型转换不兼容
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- C++:用户定义的显式类型转换函数错误
- 将类指针类型转换为键时出错
- 通过引用传递参数时C++类型转换
- 在 C++ 中将一个模板类型的对象类型转换为另一个模板类型
- C++显式类型转换(C 样式强制转换)的强制表示法和static_cast的多种解释
- C++无效的函数类型转换
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 如何将Windows产品类型转换为名称?
- 通过构造函数方法输出的类到类类型转换是 5500 为什么不是 5555
- 事件系统:使用类型转换或联合进行继承
- 如何在参数中定义隐式类型转换的构造函数?
- 类模板实例化中的类型转换