
VC9.0を使っているのですが、以下のような文を書くと
警告が出てしまいます。
int i = 100;
//warning C4305: '初期化中' : 'int' から 'bool' へ切り詰めます。
bool a = i;
この警告を出力させないために以下のようにすることに
問題はないでしょうか?
int i = 100;
bool a = static_cast<bool>(i);
このキャストを行うとき、iの値が0ならaはfalse,
iの値が0以外ならaはtrueとなることは保証されるのでしょうか?
よろしくお願いいたします。
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
横槍ですが...
> 処理系によってはboolの内部実装にunsigned charを使っていて、
> 256を入れるとオーバーフローして0になってしまうことがあるということでしょうか?
標準規格ができる前の古い処理系や、非標準処理系(つまり方言)の場合は何が起こっても不思議ではありません。
ちなみに、System.Bool云々の話はC++/CLI(これもある意味方言)と混同している可能性があるので鵜呑みにしないこと。
No.5
- 回答日時:
> デバッガで見てみましたが、256を入れてもtrueになりました。
boolって、unsigined charだったはずと思ってたけど、Visual C++ 2008 Express Editionで試したら、System.Boolに変換されてました。
だめですね、昔の知識で回答しちゃ。
すみません。わからない点があるので聞かせてください。
おっしゃられているのは、処理系によってはboolの内部実装にunsigned charを使っていて、
256を入れるとオーバーフローして0になってしまうことがあるということでしょうか?
これだと、bool型がもとからあるC++だと問題にはならないと思うのですが、
その認識であっていますでしょうか?
それとも、Cにおいてbool型をみかけ上作るために、
typdef unsigned int bool;
となっていることがたまにあり、その際にトラブルになるということでしょうか?
No.4
- 回答日時:
> iの値が0以外ならaはtrueとなることは保証されるのでしょうか?
保証されます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
main.c:7:43: warning: implici...
-
DWORDの実際の型は何でしょうか
-
ハンドルされていない例外が発...
-
構造体を引数とする、クラス間...
-
sshdログの意味
-
void func( void )について
-
【#define】 defineで定義した...
-
プログラムの中で別のmainを呼...
-
typedefの使い方
-
C++のコンストラクタを宣言する...
-
24ビットの変数
-
2重定義って??
-
C言語のコンパイルエラー
-
相互参照するクラス、俺こんな...
-
最早開始時間と最遅完了時刻を...
-
20'(角度)の計算がわかりま...
-
信頼区間の1.96や1.65ってどこ...
-
Aの値からBの値を除するとは??
-
数字以外が入力されたらエラー...
-
値差の%計算方法について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
main.c:7:43: warning: implici...
-
long型の定数の末尾にLを付ける...
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
2重定義って??
-
C++のfor文について
-
変数の型を定義しなかった場合...
-
ハンドルされていない例外が発...
-
intとINTの違いは?
-
C++でboolにintの値を代入する...
-
構造体の要素すべてに対する四...
-
プログラムの中で別のmainを呼...
-
エラー「invalid conversion fr...
-
GCCで暗黙の型変換の警告を出し...
-
【#define】 defineで定義した...
-
sshdログの意味
-
DDVによるメッセージの変更
-
typedef enumの使い方を教えて...
-
構造体を生成時にわざわざ初期...
-
DLLでLIBファイルが作成されない
おすすめ情報