在变量依赖于构造函数的类中使用静态函数
Using static function in class where a variable depends on constructor
假设我有一个静态函数的类。此函数由代码的另一部分作为静态调用,而无需实例化类对象。然而,这个静态函数在其代码中也依赖于变量x。然而,x只被初始化为某个值或在构造函数中被清除。但是,如果没有实例化类的对象,我认为变量是未定义的。所以,我有几个问题:
1)构造函数是否被调用?
2)变量x是否未定义?
我该如何处理这样的情况?
在下面的例子中,我想让y等于25,但它可以吗?
class CExample
{
public:
CExample(void);
~CExample(void);
static void foo();
int x;
};
CExample::CExample()
{
x = 5;
}
void CExample::foo()
{
int y = x*5;
}
你的代码无法编译,因为静态函数使用的变量只存在于类实例化的对象中。
我不确定你是否理解static。只有一个静态函数。你可以在任何地方打电话。哪个实例,如果CExample的x应该使用?
这看起来像是一个糟糕的设计。您可以通过将x设置为静态并将其初始化为5来修复它,以便它可以编译。然而,你最好重新思考你的设计和你想要它做什么。记住,静态的东西只有一个实例,但是CExample的实例和你调用它的构造函数的次数一样多
静态成员函数是类的服务,而不是类的特定对象的服务。类的静态数据成员和静态成员函数独立于该类对象的实例化而存在。
使用静态函数不会调用相应类的构造函数,因此变量将不存在,从而导致编译错误。
只要记住静态成员函数的存在和操作独立于类的任何对象。
从静态函数访问非静态成员是非法的。当我尝试编译你的程序时,看看gcc的输出:
test.cpp: In static member function ‘static void CExample::foo()’:
test.cpp:9: error: invalid use of member ‘CExample::x’ in static member function
相关文章:
- constexpr函数中的静态constexpr变量
- 未使用的C++未优化的静态成员函数/变量
- 获取具有静态局部变量的绑定/推断捕获 lambda 的函数指针
- 为什么我不能像这样在静态成员函数中调用静态成员变量?
- 从静态成员函数访问私有非静态类变量 - C++
- 非静态函数可以访问静态变量吗?
- 同一函数中的静态函数变量初始化顺序
- 将非静态成员函数C 的使用无效,而将成员功能作为函数变量
- 如何在运行时使用静态成员函数初始化静态成员变量
- C++ 在静态函数中使用非静态变量返回类实例
- 将 lambda 函数分配给静态成员变量 (c++)
- 类构造函数中的静态成员变量分配
- 静态成员函数访问静态私有变量时的链接器错误
- C++:如何从静态函数写入全局变量
- 使用函数模板中静态局部变量的地址作为类型标识符是否安全
- 可以静态访问全局静态变量的静态函数
- C - 如何将各处的静态函数称为改变其私有变量
- C++:静态成员不能在声明时定义,但静态函数变量可以?
- 一个定义规则是否强制创建一个静态函数变量
- C++ 静态函数变量