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も見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
C++にてtemplateで受け取った任意の型の変数が何型であるかを判定したい
C言語・C++・C#
-
既定のコンストラクタがない?
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
戻り値を返す関数の前に(void)を付ける
C言語・C++・C#
-
10
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
11
2重定義って??
C言語・C++・C#
-
12
正負を反転させて出力するプログラム
C言語・C++・C#
-
13
visual C++ でビルドの中止ができません
C言語・C++・C#
-
14
参照型で受け取った引数をポインター型に渡す方法
C言語・C++・C#
-
15
C++のfor文について
C言語・C++・C#
-
16
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
17
C言語にて構造体のメンバがNULLであるかを判定するサンプルを作成して
C言語・C++・C#
-
18
外部exe呼び出しの方法 ShellExecuteEx, System...
C言語・C++・C#
-
19
#if 1 #elseの意味について
C言語・C++・C#
-
20
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エラー「invalid conversion fr...
-
DWORDの実際の型は何でしょうか
-
相互参照するクラス、俺こんな...
-
構造体の要素すべてに対する四...
-
【#define】 defineで定義した...
-
long型の定数の末尾にLを付ける...
-
構造体を引数とする、クラス間...
-
C言語のreturnの使い方
-
構造体の宣言でエラーが出ます。
-
typedef enumの使い方を教えて...
-
0除算を判定したい
-
不正な構造体の演算
-
C言語でのフィボナッチ数列の表示
-
変数の型を定義しなかった場合...
-
2÷3などの余りについて
-
Enterキーを押されたら次の処理...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語を実行すると-infが出てき...
-
std::set<int> で、ある値が何...
-
Aの値からBの値を除するとは??
マンスリーランキングこのカテゴリの人気マンスリー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で暗黙の型変換の警告を出し...
おすすめ情報