gpt4 book ai didi

c++ - 确保最多设置一次静态成员 (C++)

转载 作者:太空狗 更新时间:2023-10-29 22:56:19 24 4
gpt4 key购买 nike

class Foo {
public:
static int& num() {
static int aNum = 0; // initial value
return aNum;
}

static void writer_func() { /* ... do stuff and assign a value to num() */ }

// a bunch of functions that "read" num()
static void reader_func1() { /* uses num() in read-only mode */}
static void reader_func2() { /* uses num() in read-only mode */}

}

如何确保所有 reader_func*() 函数都不会为 num() 赋值?

附录:在评论/回答中,一些人建议我简单地将字段声明为简单的static int num;。那是行不通的,因为它可能会违反 ODR

我不得不采用这种稍微“奇怪”的模式的原因是为了不违反 ODR

另外,这里的限制是 writer_func() 会被其他代码调用,我不能抢先调用 writer_func() 来初始化值

最佳答案

它不是特别优雅,但既然你提到 writer_func 可能被调用不止一次,你可以这样做:

class Foo {
public:
static const int& num();

static void writer_func();

// a bunch of functions that "read" num()
static void reader_func1() { /* uses num() in read-only mode */}
static void reader_func2() { /* uses num() in read-only mode */}

};

class Num {
static int& num() {
static int aNum = 0; // initial value
return aNum;
}
friend const int& Foo::num();
friend void Foo::writer_func();
};

const int& Foo::num() {
return Num::num();
}

void Foo::writer_func() {
/* ... do stuff and assign a value to num() */
}

关于c++ - 确保最多设置一次静态成员 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48453032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com