C++:我可以将非静态成员变量的值赋给静态成员变量吗?

标签 c++ static

我有一个类A,其中有一个static成员函数passName

int A::passName()
{
  .... // skip some code
  std::string name = ...; // result from codes above
  assign(); // this is a static member function in class A
  pointerA->passMethodName(name); // pointerA is a class-A static member variable, but of type 
                                 // class-B, passMethodName is a class-B non-static member function.
}

分配函数是:

void A::assign(){
  pointerA = tempPointerA;
}

说明:tempPointerA是运行过程中生成的一个值。它是一个非静态私有(private) A 类成员,每次构造 A 类的新对象时都会对其进行初始化。但我知道在静态函数中我只能直接使用静态成员,所以我需要确保pointerA是静态成员。那么assign()函数是否可行(或者我更愿意说,这里展示的整个工作原理是否可行)?

谢谢你的想法!

最佳答案

没有。静态成员函数只能操作静态变量或调用其他静态函数。 (或 namespace 范围函数,或多或少与静态函数相同)。

§9.4.1 [class.static.mfct]

A static member function does not have a this pointer.

因此无法在static函数中访问非静态成员变量。

如果您确实需要 assign 保持静态,那么您应该做的是重构您的assign()函数以接受类型的变量 code>tempPointerA`,然后传入所需的变量。

int A::passName(B* _in)
{
  std::string name = ...; // result from code above
  assign(_in); // this is a static member function in class A
  _in->passMethodName(name);
}

否则我建议您根本不要将其设为静态

关于C++:我可以将非静态成员变量的值赋给静态成员变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34997194/

相关文章:

c# - 具有静态方法的静态类与具有静态方法的常规类有什么区别?

c++ - Windows Socket 无法绑定(bind) VPN IP 地址

c++ - 当全局函数需要指向 impl 的指针时,如何防止 impl 细节出现在头文件中?

c++ - 令人困惑的 std::map 插入行为

java - 非静态变量 this 不能从静态上下文 JFrame 中引用

java - 无法从另一个函数向 Java 中的 JTextArea 添加文本

c++ - c++/cx 中的 storagefile::ReadAsync 异常?

c++ - 在工厂方法中测试对象的创建

c - 如何在不调用声明它的函数的情况下修改局部静态变量?

java - 为什么使用 Arrays.fill 与手动创建列表时得到不同的结果?