我想知道,如果我使用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语言,从那时起我就是否应该进行演员或者让编译器这样做有点困惑。
答案 0 :(得分:1)
这里不需要static_cast<>
,因为正如您所猜测的那样,编译器将自行执行资格转换。
它只会使您的(有效)代码难以阅读,因此我不会使用它。当我读到一个static_cast<>
时,我希望有一些相关的东西会发生需要的演员表,一些需要我注意的东西,并要求我去弄清楚发生了什么为什么这就像一个假警报。
更喜欢让您的代码易于阅读和清理。
如果你有编译时间的问题,我个人不会为这种微优化而烦恼 - 他们也可能增加编译时间(毕竟,编译器需要检查是否static_cast
首先是合法的)。相反,考虑一下你是否不能重新考虑类的设计和它们之间的依赖关系 - 不能在没有看到它们的情况下给出具体的建议。
答案 1 :(得分:0)
不,它不会节省编译时间。
要弄清楚原因,请考虑:
auto i = /* some expr */;
对战:
int i = /* some expr */;
在两种情况下,编译器需要做的第一件事就是计算some expr
的类型。然后,在auto
情况下,它只会将基类型视为i
的基类型,而在第二种情况下,如果基类型不是int
,它将检查是否存在{{1}}有效的转换。
同样的情况发生在您的情况下,无论您是否明确指定类型,编译器必须计算表达式的类型,必须检查发生的转换(无论是否隐含)是允许的。
因此,您没有帮助,而且您通过混乱使自己和您的同事更难以理解代码。