utibori-jp
@utibori-jp (ウチボリ)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

すでに一度変数の型を宣言したものに、(int)がなぜ使われているのでしょうか?(

Q&A

質問です

c++の勉強をしていたら、ソースコードに以下のようなものがありました。

for (int i = 0; i < (int)S.size(); ++i){
    cout <<  S[i] << " ";
}

このコードは一部抜粋なのですが、ベクトルSはすでに変数の型を一度宣言してます。
それにも関わらず、この上のコードのfor文の条件式のS.size()の前には、(int)が付けられています。何のため(int)をつけているのですか?

0

2Answer

(int)は、変数定義ではなくキャストです。
S.size()の返す値は、int以外の型ではないでしょうか?
それを、(int)と前置することで、iと比較可能なint型であると宣言しています。

for (int i = 0; i < (int)S.size(); ++i){
    cout <<  S[i] << " ";
}
  • ソースの挿入を「```cpp:」の行で始めると、C++の文法に基づいて着色されて読みやすくなります。
  • 既に投稿した質問でも、再度編集して書き替えることができます。
    • 記事の右上辺りに「編集する」リンクがあると思います。
0Like

これは雑なキャストをしてコンパイラの警告を黙らせているコードですね。
Sの型にもよりますが、おそらくS.size()std::size_tなどの符号なしの型なのでしょう。符号なしの型と符号付きの型を比較すると、まともなコンパイラなら警告を出します。
本来なら、このようなキャストで警告を黙らせるのではなく、iの型をS.size()の型と同じにするのが良い解決策です。

0Like

Your answer might help someone💌