1

プリミティブ型から別のプリミティブ型への typedef を持つことは有効な C++ ですか?

typedef int long;

VS 2012 では、警告は発行されますが、正常にコンパイルされます。

警告 C4091: 'typedef': 変数が宣言されていない場合、'long' の左側は無視されます

しかし、gcc-4.3.4 では失敗します。

エラー: 宣言は何も宣言していません。

標準に準拠しているコンパイラはどれですか?

PS: プロダクション コードではこのようなことは書きません。ちょうど思考とチェックを思いつきました。

4

3 に答える 3

7

それは有効なC ++ですか

いいえ。C++11、§ 7.1.3.6:

特定のスコープでは、 typedef 指定子を使用して、そのスコープで宣言された型の名前を再定義して、別の型を参照してはなりません。

于 2012-11-30T16:28:28.207 に答える
5

どちらも同じことを言っていますが、一方はエラーとして報告しています。VS の警告に「typedef が無視されました」と表示されていることに注意してください。問題は、int longlong intは同義語であるため、基本的に名前のないtypedefをに作成しているということですlong

于 2012-11-30T16:27:59.267 に答える
2

どちらも標準が要求することを行います。その typedef は無効であり、両方のコンパイラが診断を発行します。

于 2012-11-30T17:12:36.483 に答える