
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も見ています
-
C++ 構造体の一括初期化 {0}
C言語・C++・C#
-
Dirコマンドでフォルダ内ファイルの合計サイズをだすには?(コマンドプロンプトにて)
UNIX・Linux
-
C++ クラスをメンバにもつクラスについて
C言語・C++・C#
-
-
4
参照型で受け取った引数をポインター型に渡す方法
C言語・C++・C#
-
5
戻り値で構造体を返すことは可能でしょうか?
C言語・C++・C#
-
6
静的でないメンバ関数の呼び出しが正しくありません
C言語・C++・C#
-
7
CString から LPCTSTRの型に変換
C言語・C++・C#
-
8
C++で関数ポインタから関数名を取得する方法
C言語・C++・C#
-
9
C++17で、unsigned char * 配列を、文字列リテラルで初期化する方法はありませんか?
C言語・C++・C#
-
10
win10で、正確な待ち時間の作り方
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
long型の定数の末尾にLを付ける...
-
visualstudio C# テキストボッ...
-
C++でboolにintの値を代入する...
-
C++のfor文について
-
main.c:7:43: warning: implici...
-
intとINTの違いは?
-
C++/CLIでネイティブの構造体を...
-
配列を用いない最大値の求め方
-
直接アドレス指定のポインタの...
-
GCCで暗黙の型変換の警告を出し...
-
typedef enumの使い方を教えて...
-
includeが必須ではない理由
-
C言語 宣言した変数になにも代...
-
void func( void )について
-
関数の実体定義にヘッダファイ...
-
0除算を判定したい
-
変数の型を定義しなかった場合...
-
「Aに対するBの割合」と「Aに対...
-
「指定されたキャストは有効で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
long型の定数の末尾にLを付ける...
-
main.c:7:43: warning: implici...
-
intとINTの違いは?
-
C++のfor文について
-
2重定義って??
-
void func( void )について
-
変数の型を定義しなかった場合...
-
C言語のコンパイルエラー
-
C++でboolにintの値を代入する...
-
ハンドルされていない例外が発...
-
構造体の要素すべてに対する四...
-
構造体の宣言でエラーが出ます。
-
プログラムの中で別のmainを呼...
-
[C++]メンバ関数の仮引数について
-
0除算を判定したい
-
プログラム、どのように書いて...
-
typedef enumの使い方を教えて...
-
enumについて
おすすめ情報