MSVC 是否支持 C++11 样式属性而不是 __declspec?

Hum*_*ler 5 c++ visual-c++

我知道 C++11 样式属性支持以命名空间为前缀的特定于供应商的属性。GCC 和 Clang 都支持带有前缀gnu::(gcc 和 clang)或clang::(仅 clang)的各种属性,它们对应于等效__attribute__((...))语法。

MSVC 属性的文档表明它支持标准属性以及gsl::属性,但没有提及__declspec属性的向后兼容性。

我希望__declspec(noinline)有类似的属性表示[[msvc::noinline]]- 但我似乎找不到任何关于此的文档。

所以我的问题是,MSVC 是否支持__declspecC++11 样式属性?

如果没有,会有人知道他们没有吗?C++ 属性的最初原理是抽象各种特定于编译器的__attribute__特性__declspec,因此如果在标准化 9 年后仍然不支持它,那就很奇怪了。

dxi*_*xiv 4

截至 VC++ 2019,没有[[msvc::noinline]]或其他等效项。__declspec

\n

来自C++ 属性的官方 MSVC 文档:

\n
\n

在 Visual C++ 中,您可以使用该[[deprecated]]属性而不是 using declspec(deprecated),并且该属性将被任何符合标准的编译器识别。 对于所有其他declspec参数(例如dllimport和 )dllexport,目前还没有等效的属性,因此您必须继续使用declspec语法。

\n
\n
\n

[编辑] \xc2\xa0 关于为什么 [[attributes]]在 VC++ 中没有更广泛使用(也许__declspec完全取代)的信息出人意料地稀少。我发现的最接近权威来源的是 reddit 线程C++ 属性说明符序列、MSVC 和我中的这些注释中的这些注释:

\n
\n

spongo2 - MSVC 开发经理

\n

我们刚刚就这个话题进行了一次激动人心的团队讨论。我们确实在这里看到了这个用例,它很有趣,但我们想知道可以放置属性的位置数量很大并且不断增长这一事实是否会导致令人惊讶的行为。

\n
\n
\n

STL - MSVC STL 开发

\n

我会在 STL 中使用 [[msvc::kitty]] 而不是 __declspec(kitty),以使我们的源代码更适合其他前端。我已经改用 [[noreturn]] 而不是 __declspec(noreturn) 因为那个是标准的。

\n
\n

我的理解是,阻碍更广泛采用的是对属性范围与 __declspec 的担忧,以及总体上的向后兼容性。

\n

  • 哇,在我链接的同一页面上,我错过了那句话......哎呀! (2认同)
  • @Human-Compiler 这是一个很好的问题,文档并没有真正涵盖“*为什么不*”部分。我最后对此进行了编辑。 (2认同)