MSVC是否支持C++11样式的属性而不是__declspec
Does MSVC support C++11-style attributes instead of __declspec?
我知道C++11样式的属性支持以名称空间为前缀的特定于供应商的属性。GCC和Clang都支持前缀为gnu::
(GCC和Clang(或clang::
(仅Clang(的各种属性,这些属性对应于等效的__attribute__((...))
语法。
MSVC属性的文档显示,它支持标准属性以及gsl::
属性,但没有提及__declspec
属性的向后兼容性。
我希望像__declspec(noinline)
这样的东西有[[msvc::noinline]]
的属性表示,但我似乎找不到任何关于这方面的文档。
所以我的问题是,MSVC是否支持__declspec
作为C++11风格的属性?
如果没有,会有人碰巧知道他们没有吗?C++属性最初的基本原理是抽象各种编译器特定的__attribute__
和__declspec
特性,因此,如果在标准化9年后仍然不支持它,那就太奇怪了。
截至VC++2019,没有[[msvc::noinline]]
或其他等效的__declspec
。
来自C++中属性的官方MSVC文档:
在Visual C++中,您可以使用
[[deprecated]]
属性而不是使用declspec(deprecated)
,并且任何符合条件的编译器都会识别该属性 对于所有其他declspec
参数,如dllimport
和dllexport
,还没有等效的属性,因此必须继续使用declspec
语法
[EDIT]关于为什么[[attributes]]
没有在VC++中得到更广泛的使用,也许完全取代了__declspec
的信息少得惊人。我发现最接近权威来源的是reddit线程C++属性说明符序列中的这些注释,MSVC和我:
spongo2-MSVC开发经理
我们刚刚在团队会议室就这个话题进行了一次激动人心的讨论。我们肯定在这里看到了用例,这很有趣,但我们想知道,一个人可以放置属性的地方数量很大,而且还在增长,这是否会导致令人惊讶的行为
STL-MSVC STL Dev
我会在STL中使用[[msvc::kitty]]而不是__declspec(kitty(,以使我们的源代码更容易被其他前端接受。我已经改用[[noreturn]]而不是__declspec(noreturn(,因为它是标准的
我的理解是,阻碍更广泛采用的是对属性范围与__declspec以及总体向后兼容性的担忧。
根据C++中的属性,唯一具有属性替换的__declspec((是[[不推荐使用]],对于所有其他__declspec((修饰符,您必须继续使用__declsspec。
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- C++概念:如何使用'concept'检查模板化结构的属性?
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 通过指向指针数组的指针访问子类的属性
- MSVC是否支持C++11样式的属性而不是__declspec
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 类的C++属性似乎已重新初始化
- Qt Quick-如何仅从c++代码与qml属性交互
- 用概念检查属性的类型
- C++如何将同一类的实例作为属性
- 按多个属性排序
- 主函数参数的属性
- "perf_event_attr"结构的"read_format"属性的选项到底是什么?
- C++删除未使用的类属性会导致 std::logic_error
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 使用内存地址访问结构的属性值
- C++调用具有 *this 属性的单个帮助程序函数
- C++ 在堆栈中包含多态属性的类对象存储
- C++ 命名参数习惯用语 - 未设置字符串属性
- 使用 CTRP 时,是否访问访问父构造函数 UB 中的子属性?