this指针在OpenMP中是否总是共享的? 尽管使用了default(none),编译器不会对以下代码报错: #pragma omp parallel for default(none), shared(n) for ( SInt i = 0; i < n; ++i ) { f( i, this ); // f is some function. }
OpenMP标准为您的代码中引用的变量定义了数据共享属性规则。然而,根据C++标准草案(n3242 9.3.2),this不是一个变量,而是一个prvalue表达式(强调我的):在非静态(9.3)成员函数的主体中,“关键字this是一个prvalue表达式”,其值是调用该函数的对象的地址。类X的成员函数中this的类型是X*。如果成员函数被声明为const,则this的类型为const X*;如果成员函数被声明为volatile,则this的类型为volatile X*;如果成员函数被声明为const volatile,则this的类型为const volatile X*。