有时候在用VS给的项目模板创建项目,或查看msvc文档时,总会看到一个有中括号的语法。
比如说下面代码的[[deprecated]],它的含义是弃用
比如说:
class Test{
public:
[[deprecated]]
static void print(){}
}
等同于下面:
package www.test.com;
public class Test{
@Deprecated
public static void print();
}
msvc中也有一些,比如https://docs.microsoft.com/zh-cn/cpp/cpp/interface?view=msvc-170
// deriv_interface.cpp
#define _ATL_ATTRIBUTES 1
#include <atlbase.h>
#include <atlcom.h>
#include <string.h>
#include <comdef.h>
#include <stdio.h>
[module(name="test")];
[ object, uuid("00000000-0000-0000-0000-000000000001"), library_block ]
__interface IFace {
[ id(0) ] int int_data;
[ id(5) ] BSTR bstr_data;
};
[ coclass, uuid("00000000-0000-0000-0000-000000000002") ]
class MyClass : public IFace {
private:
int m_i;
BSTR m_bstr;
public:
MyClass()
{
m_i = 0;
m_bstr = 0;
}
~MyClass()
{
if (m_bstr)
::SysFreeString(m_bstr);
}
int get_int_data()
{
return m_i;
}
void put_int_data(int _i)
{
m_i = _i;
}
BSTR get_bstr_data()
{
BSTR bstr = ::SysAllocString(m_bstr);
return bstr;
}
void put_bstr_data(BSTR bstr)
{
if (m_bstr)
::SysFreeString(m_bstr);
m_bstr = ::SysAllocString(bstr);
}
};
int main()
{
_bstr_t bstr("Testing");
CoInitialize(NULL);
CComObject<MyClass>* p;
CComObject<MyClass>::CreateInstance(&p);
p->int_data = 100;
printf_s("p->int_data = %d\n", p->int_data);
p->bstr_data = bstr;
printf_s("bstr_data = %S\n", p->bstr_data);
}
那么,当我使用[]时,比如[in]时,会报错https://docs.microsoft.com/zh-cn/cpp/error-messages/compiler-errors-1/compiler-error-c2337?f1url=%3FappId%3DDev16IDEF1%26l%3DZH-CN%26k%3Dk(C2337)%26rd%3Dtrue&view=msvc-170
我得知这个语法的名字叫做“特性”,但在网上一查,却没有一个回答。
那么请问这个语法的功能是什么?它有哪些标识符?