[解決済み] C++0xでの変換の狭小化。これって、まるで破壊的な変更のように聞こえるのは私だけでしょうか?
2023-03-30 22:38:33
質問
C++0xでは、以下のコードや類似のコードが不正な形式となる予定です。
狭義変換
の
double
を
int
.
int a[] = { 1.0 };
このような初期化は実際のコードであまり使われていないのではないかと思っています。この変更によってどれだけのコードが壊されるのでしょうか?もしあなたのコードが影響を受けるのであれば、あなたのコードでこれを修正するのは大変な作業でしょうか?
参考までに、n3225 の 8.5.4/6 を参照してください。
絞り込み変換は暗黙の変換
- 浮動小数点数型から整数型への変換、または
- ただし、ソースが定数式で、変換後の実際の値が(正確に表現できない場合でも)表現可能な値の範囲内である場合、または、long double から double または float、あるいは double から float への変換。
- ただし、ソースが定数式で、変換後の実際の値がターゲットの型に収まり、元の型に変換されたときに元の値を生成する場合は例外です。
- ただし、ソースが定数式で、変換後の実際の値がターゲットの型に適合し、元の型に変換されたときに元の値を生成する場合は例外とする。
どのように解決するのですか?
GCC を使用したときに、このようなブレークダウンに遭遇しました。 このようなコードに対してコンパイラーはエラーを出力しました。
void foo(const unsigned long long &i)
{
unsigned int a[2] = {i & 0xFFFFFFFF, i >> 32};
}
機能的には
void foo(const long long unsigned int&)
:エラー:狭義変換の
(((long long unsigned int)i) & 4294967295ull)
からlong long unsigned int
からunsigned int
の中にある{ }。エラー:狭義変換の
(((long long unsigned int)i) >> 32)
からlong long unsigned int
からunsigned int
の中にある{ }。
幸いなことに、エラーメッセージはわかりやすく、修正も簡単でした。
void foo(const unsigned long long &i)
{
unsigned int a[2] = {static_cast<unsigned int>(i & 0xFFFFFFFF),
static_cast<unsigned int>(i >> 32)};
}
このコードは外部ライブラリにあり、1つのファイルに2つだけ出現していました。 私は、このブレークチェンジが多くのコードに影響を与えるとは思いません。 初心者は を取得する を混乱させるかもしれません。 とはいえ
関連
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)