提问人:Cool_Cornflakes 提问时间:10/21/2022 更新时间:10/21/2022 访问量:128
从成员函数修改“static const int* const”类型的数据
Modifying a data of type "static const int* const" from a member function
问:
TLDR 问题:
class MyClass
{
public:
void Modify()
{
//How can I modify MyData here
}
public:
static const int* const MyData;
};
博学:
我有一个这样的班级:
class Window
{
public:
const int* GetKeyboard()
{
return m_Keyboard;
}
private:
const int* const m_Keyboard = 0;
};
有了这个,我将访问键盘,但我想访问它。所以我写了这样的东西:WindowObjectPtr->GetKeyboard()
Input::Keyboard
class Window
{
public:
const int* GetKeyboard()
{
return m_Keyboard;
}
private:
const int* const m_Keyboard = 0;
};
const int* Input::Keyboard = 0;
class Application;
class Input
{
friend class Application;
private:
static void SetKeyboard(const int* k) { Keyboard = k; }
public:
static const int* Keyboard;
};
class Application
{
public:
void Init()
{
Input::SetKeyboard(m_Window.GetKeyboard());
}
private:
Window m_Window;
};
int main()
{
Application application;
application.Init();
//Input::Keyboard
}
上面代码的唯一问题是我可以执行 Input::Keyboaord = nullptr;
所以我想将键盘的定义更改为,但无法再设置它。static const int* const Keyboard;
Input::SetKeyboard
有没有类似的东西的有效版本?还是实现我想要做的事情的不同方法?mutable static const int* const Keyboard;
答:
对象要么是,要么不是。如果是这样,则必须在其初始化中为其指定一个值,并且以后更改它的任何尝试都会导致未定义的行为(如果它一开始就不是格式不正确的)。const
const
在执行流中的某个其他点之后,无法创建对象。const
当然,你可以只添加一个对对象的引用,并在你不打算修改它以实现 const-correctness 时使用它:const
static const int* Keyboard;
static const int* const& cKeyboard = Keyboard;
现在可以用于修改,不能(没有诡计)。Keyboard
cKeyboard
const_cast
但这一切似乎是完全可以避免的和混乱的,因为你可能只是一个非静态成员,有一个非静态成员,然后所有初始化都在构造函数的初始值设定项列表中发生。那么获得资格就没有问题了。Keyboard
Application
Input
Keyboard
const
评论
const
const
很多东西都可以被黑客入侵。
例如,可以有一个引用非静态成员的常量成员。私人成员可以由朋友初始化和设置。公共成员只能用于读取:static
private
#include<iostream>
struct foo {
static const int& x_public;
friend class bar;
private:
static int x_private;
};
const int& foo::x_public = foo::x_private;
int foo::x_private = 0;
struct bar {
bar() {
foo::x_private = 42;
}
};
int main() {
bar b;
std::cout << foo::x_public;
}
Thgouh,我真的不建议使用它。我同意这个答案,你应该使用非静态成员。
上一个:可变值更改后未执行可组合函数
评论
const
Window
Application
Input
Input
Keyboard
Input
Application
Window
const