c++中的手动或自动类型转换

manual or automatic type casting in c++

本文关键字:类型转换 c++      更新时间:2023-10-16

我想知道,如果我使用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,它将检查是否存在有效的转换。

同样的事情发生在你的情况下,无论你是否显式指定类型,编译器必须计算表达式的类型,必须检查发生的转换是否被允许(无论是否隐式)。

你没有帮助,因此,你使你自己和你的同事的代码变得不那么可读。