1. ホーム
  2. c++

[解決済み】size_tをdoubleまたはintにキャストする方法 C++

2022-02-20 22:06:49

質問

私の質問は、以下の通りです。

size_tのデータを持っていますが、doubleまたはintに変換したいのですが。

もし私が以下のようなことをしたら

 size_t data = 99999999;
 int convertdata = data;

オーバーフローする可能性があるため、コンパイラは警告を出します。

boostのような変換を行うメソッドはありますか?

解決方法は?

キャストです。 Blaz Bratanicが提案したように :

size_t data = 99999999;
int convertdata = static_cast<int>(data);

を使うと警告が出なくなる可能性があります (ただし、原則的にコンパイラは、たとえキャストがあったとしても、好きなものに対して警告を出すことができます)。

しかし、この方法では、警告が告げていた問題、すなわち size_t から int は本当にオーバーフローしてしまうかもしれません。

可能な限り、以下のようなことがないようにプログラムを設計してください。 必要 を変換する必要があります。 size_t の値を int . に格納するだけです。 size_t 変数に入れ、それを使用します。

に変換する。 double はオーバーフローを起こしませんが、非常に大きな size_t の値です。繰り返しになりますが、このように size_tdouble を使用したほうがまだましです。 size_t 変数を使用します。

( R Sahuの回答 には、キャストを回避できない場合、オーバーフロー時に例外を投げるなどの案があります)。