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

时间:2013-04-13 12:04:47

标签: c++ casting

我想知道,如果我使用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语言,从那时起我就是否应该进行演员或者让编译器这样做有点困惑。

2 个答案:

答案 0 :(得分:1)

这里不需要static_cast<>,因为正如您所猜测的那样,编译器将自行执行资格转换。

它只会使您的(有效)代码难以阅读,因此我不会使用它。当我读到一个static_cast<>时,我希望有一些相关的东西会发生需要的演员表,一些需要我注意的东西,并要求我去弄清楚发生了什么为什么这就像一个假警报。

更喜欢让您的代码易于阅读和清理

如果你有编译时间的问题,我个人不会为这种微优化而烦恼 - 他们也可能增加编译时间(毕竟,编译器需要检查是否static_cast首先是合法的)。相反,考虑一下你是否不能重新考虑类的设计和它们之间的依赖关系 - 不能在没有看到它们的情况下给出具体的建议。

答案 1 :(得分:0)

不,它不会节省编译时间。

要弄清楚原因,请考虑:

auto i = /* some expr */;

对战:

int i = /* some expr */;

在两种情况下,编译器需要做的第一件事就是计算some expr的类型。然后,在auto情况下,它只会将基类型视为i的基类型,而在第二种情况下,如果基类型不是int,它将检查是否存在{{1}}有效的转换。

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

因此,您没有帮助,而且您通过混乱使自己和您的同事更难以理解代码。