2016-09-13 26 views
0

私はアドレス指定のキャストのためにコンパイル時に計算されることがいくつあるのだろうかと思っています。cのunsigned char *からconst char *へのキャストコストアドレッシングポインタ?

e。 g。

strlen APIに定義で:

size_t strlen (const char * str); 

彼らはARRのみconst char *を取得します。

が、いつか私はちょうど私がコードにあるだろうにコストのだろうかunsigned char *

const char *にに焦点を当て

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

のようでしょうか?

+4

実行時コストとコンパイル時間コストは重要ではありません。より重要なものに移動してください。それは実際にはパフォーマンス上の考慮事項ではなく機能的なものです。絶対に必要なときにのみキャストし、必要でないときはキャストしません。 – kaylum

+0

@kaylumのコメントに追加するには、キャストの** ** **すべての意味を理解すればキャスト**し、完全に**それらを受け入れる!配列の暗黙的な変換について知りたい。 – Olaf

+0

それは答えでなければなりません。 –

答えて

1

このようにキャストに関連するランタイムオーバーヘッドはありません。変数の宣言方法とは異なる方法で変数にアクセス(または解釈)するようにコンパイラに指示するだけです。

具体的なケースでは、オーバーヘッドのないchar*ポインタのような配列をcharの配列として扱うコードを生成するのに十分なほどスマートです。

一般に、Cでのキャストは実行時のオーバーヘッドをまったく受けません。

関連する問題