Gcc/g ++ 4.9では、次のように記述できます。
int x __attribute__((unused)) = f();
xが意図的に未使用であることを示します。
C++ 11 [[]]
属性表記でこれをどうにかして可能ですか?
私は試した:
int x [[unused]] = f();
しかし、それは機能しません。
(はい、実装で定義された属性であることを知っています。)
はい、_[[gnu::unused]]
_を使用します
すでに述べたように、unused
は、標準で指定されている 標準属性 の一部ではありません。
標準では、___attribute__
_および___declspec
_のような実装定義の属性も新しい構文で使用できます。コンパイラーが属性(例としてMSVCでコンパイルするときのgcc属性)を認識しない場合は、単に無視されます。 (おそらく警告付き)
Gccの場合、gnuプレフィックスとC++ 11属性構文を使用できます。__attribute__((unused))
の代わりに_[[gnu::unused]]
_は、他のgcc属性にも同じように適用する必要があります。
有る [[maybe_unused]]
C++ 17の属性。これはGCC 7で実装されています。 GCCでのC++標準のサポート を参照してください。
[[maybe_unused]] void f([[maybe_unused]] bool thing1,
[[maybe_unused]] bool thing2) {
[[maybe_unused]] bool b = thing1 && thing2;
assert(b);
}
あなたが参照しているものは 属性指定子 として知られています。これは、プラットフォームに依存するさまざまな指定子を標準化する試みです。
__attribute__
_[〜#〜] gcc [〜#〜]/ICC(Linux)の場合__declspec
_ on [〜#〜] msvc [〜#〜]/ICC(Windows)添付のドキュメントリンクで確認できるように、C++ 11でサポートされている指定子は次のとおりです。
[[noreturn]]
_[[carries_dependency]]
_c ++ 14では:
[[deprecated]]
_(次の形式でもサポートされます:[[deprecated("reason")]]
)したがって、答えは次のとおりです。いいえ、C++ 11機能のみを使用することはできません。
ポータブルソリューションにonlyに興味がない場合は、方法があるかもしれません。 C++標準はこのリストを制限しません。
C++標準では、次の属性のみが定義されています。 他のすべての属性は実装固有です。
さまざまなコンパイラーが一部の非標準指定子をサポートできます。たとえば、Clangがサポートしていることを確認するために このページ を読むことができます。
[[gnu::unused]]
_おそらく、GCCのバージョンもこの指定子をサポートしています。 このページ には、一般化された属性のサポートに関するバグレポートが含まれています。 _[[gnu::unused]]
_についても説明します。