对类的成员有两种类型的调用,一种是使用点(.
)直接引用特定对象的成员函数,另一种方法是使用双冒号,例如Obj::function()
。
我的问题是,成员的双冒号调用是一个线程安全的操作吗?
答案 0 :(得分:2)
对成员的双冒号调用是否是线程安全的操作?
如果调用的函数是线程安全的,那么它是线程安全的。例如:
class C
{
static std::string mx;
public:
static std::string fx(const char* x) { mx = x; return mx; } // NOT THREAD SAFE
static std::string fy(const char* y) { return y; } // THREAD SAFE
};
您可以调用任一功能:
cout << C::fx("hello") << endl; // NOT THREAD SAFE
cout << C::fy("world") << endl; // THREAD SAFE
因此它与两个冒号无关,而与方法实现有关。
答案 1 :(得分:0)
::
在运行时甚至不用担心。所以它是线程安全的,因为它已经在线程投入使用时已经解决了。
::
仅用于在可能存在含糊不清的名称的情况下明确指出哪个命名空间或类范围。