C++ __忽略declspec(访问(只读,1))

C++ __忽略declspec(访问(只读,1)),c++,attributes,C++,Attributes,我刚刚完成了这个过程,但不幸的是,当我试图在我的VS代码上实现它时,它完全忽略了它 #include<iostream> using namespace std; __attribute__((access(read_only,1))) void prt(int a){ a += 1; // expected a error std::cout << a << std::endl; } int main(){ prt(8);

我刚刚完成了这个过程,但不幸的是,当我试图在我的VS代码上实现它时,它完全忽略了它

#include<iostream>
using namespace std;

__attribute__((access(read_only,1))) void prt(int a){
    a += 1; // expected a error
    std::cout << a << std::endl;
}
int main(){
    prt(8);
    return 0;
}

//output->
//warning: 'access' attribute directive ignored [-Wattributes]
//__attribute__((access(read_only,1))) void prt(int a){
//                                                   ^
//9
#包括
使用名称空间std;
__属性(访问(只读,1))void prt(int a){
a+=1;//应为错误
std::cout来自您链接的(我的重点):

所需的ref-index位置参数表示函数参数 指针(或C++,引用)类型>受访问。< /P> 在您的代码示例中,参数是
int
类型的,因此该属性被忽略,因为它不适用于它:您将如何“写入”
int
参数?出于所有目的,当我执行以下操作时

void prt(int a){
    a += 1;
    std::cout << a << std::endl;
}

int main(){
    int value = 8;
    prt(value);
    std::cout << value << std::endl;
    return 0;
}
void prt(int a){
a+=1;

std::我可以通过const int知道怎么做,但我也想知道。我尝试过使用指针,但仍然ignored@Efulefu“如果您想使其成为只读的,只需将其声明为
const int a
”——来自同一文档:“[read-only]模式意味着比
const
限定符更有力的保证,该限定符在脱离指针时,不会阻止修改指向的对象。”@RemyLebeau是的,我理解const和该属性的作用之间的区别,我将const作为非指针和非引用类型的参数的替代,我将进行编辑以澄清。@我刚刚测试过,我可以确认我在g++7.5.0中也有相同的问题,将prt定义为prt(int*a),我得到了同样的警告…@vectrox我在WSL中更新GCC时遇到问题,并且手头没有Linux设备,但我编辑了我的答案,以包含接受access属性(v10)的GCC的最低版本根据changelogs。我今晚晚些时候会测试它。我也没有足够的分数来评论您的问题,以询问您尝试使用的是哪个版本,但我怀疑它不是v10;)VSCode从一开始就支持gcc属性吗?