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で質問しましょう!
似たような質問が見つかりました
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- FX・外国為替取引 mql4のコンパイルエラー箇所の修正お願いします。 1 2023/03/15 16:14
- C言語・C++・C# 競技プログラミングに関する質問です。 3 2022/04/03 19:51
- Java Java 配列<選挙> 4 2023/07/31 15:07
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# C言語 3 2022/10/04 15:07
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
既定のコンストラクタがない?
C言語・C++・C#
-
C++にてtemplateで受け取った任意の型の変数が何型であるかを判定したい
C言語・C++・C#
-
#defineの定数を文字列として読み込む
C言語・C++・C#
-
-
4
構造体のメンバをfor文で回したい
C言語・C++・C#
-
5
ファイル内のデータを1行削除する方法
C言語・C++・C#
-
6
C++ 構造体の一括初期化 {0}
C言語・C++・C#
-
7
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
8
char*を初期化したいのですが
C言語・C++・C#
-
9
正負を反転させて出力するプログラム
C言語・C++・C#
-
10
visual C++ でビルドの中止ができません
C言語・C++・C#
-
11
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
12
参照型で受け取った引数をポインター型に渡す方法
C言語・C++・C#
-
13
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
14
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
15
外部exe呼び出しの方法 ShellExecuteEx, System...
C言語・C++・C#
-
16
2重定義って??
C言語・C++・C#
-
17
C++のfor文について
C言語・C++・C#
-
18
戻り値を返す関数の前に(void)を付ける
C言語・C++・C#
-
19
enumの値から定義名を文字列化したい
C言語・C++・C#
-
20
error C2664: 'LPCTSTR' に変換できません。
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
変数の型を定義しなかった場合...
-
関数の実体定義にヘッダファイ...
-
typedef enumの使い方を教えて...
-
long型の定数の末尾にLを付ける...
-
C++のfor文について
-
main.c:7:43: warning: implici...
-
C++/CLIでネイティブの構造体を...
-
2重定義って??
-
ハンドルされていない例外が発...
-
構造体の要素すべてに対する四...
-
構造体の宣言でエラーが出ます。
-
コンパイルすると error C1083 ...
-
C++デバックエラーについて詳し...
-
VC6でlong longでエラー?
-
スレッドのスケジューリングポ...
-
HINSTANCEの型
-
STL vectorの初期化
-
C++ template operator T()
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
typedef enumの使い方を教えて...
-
C++のfor文について
-
long型の定数の末尾にLを付ける...
-
2重定義って??
-
関数の実体定義にヘッダファイ...
-
main.c:7:43: warning: implici...
-
変数の型を定義しなかった場合...
-
visualstudio C# テキストボッ...
-
ハンドルされていない例外が発...
-
C++でboolにintの値を代入する...
-
enumについて
-
構造体の宣言でエラーが出ます。
-
【#define】 defineで定義した...
-
C++ クラスをメンバにもつクラ...
-
0除算を判定したい
-
構造体の要素すべてに対する四...
-
値を返り値に返すのと参照渡し...
-
namespace定義の使い方
-
GCCで暗黙の型変換の警告を出し...
おすすめ情報