2016-09-13 67 views
0

我想知道有多少人会计算在编译寻址的转换。将c中的cast成本寻址指针从unsigned char *转换为const char *?

e。 G。

strlen API

定义:

size_t strlen (const char * str); 

他们得到的常用3只const char *

,但有时我使用像

unsigned char arr[] = "something" 
strlen((const char *)arr); 

只是专注于unsigned char *const char *

我不知道什么样的代价会有代码?

+4

没有运行时成本和不重要的编译时间成本。转移到更重要的事情。这不是一个真正的性能考虑,而是一个功能性考虑因素 - 只有在绝对必要时才施放,而不是在不施加压力时施放。 – kaylum

+0

要添加到@kaylum的评论:只有当你明白**全部** **的影响**并完全接受他们时才施放!您想了解有关数组的隐式转换。 – Olaf

+0

这应该是答案。 –

回答

1

以这种方式没有与剧组关联的运行时间开销。它只是告诉编译器访问(或解释)与变量声明不同的变量。

在您的具体情况下,编译器足够聪明,可以生成代码,将char数组看作char*指针,而无需额外开销。

一般来说,C中的强制转换决不会产生任何运行时开销。