在 C++ 中初始化静态字符串成员

initialize static string member in c++

本文关键字:字符串 成员 静态 初始化 C++      更新时间:2023-10-16

当你有一个带有静态 int 成员的类时,你可以初始化它并每次创建此类的新实例时,都可以递增 int 值。

我想做的是我有一个静态字符串成员,所以我用"s"初始化它但是我想连接一个数字,每次创建类的新实例时都会递增该数字。

这样,对于第一个实例,静态字符串值将是"S1",第二个是"S2"等。

是否可以通过静态字符串成员的初始化来做到这一点?

只是为了澄清变量的初始化只发生一次。对变量的后续更改是赋值。

请求的行为是可能的,最简单的方法是有一个附带的static int counter和一个static const std::string prefix = "s",并根据需要分配给static std::string

#include <iostream>
#include <string>
class String_counter
{
public:
    String_counter()
    {
        value_ = prefix_ + std::to_string(++counter_);
    }
    ~String_counter()
    {
        value_ = prefix_ + std::to_string(--counter_);
    }
    static const std::string& value() { return value_; }
private:
    static int counter_;
    static const std::string prefix_;
    static std::string value_;
};
int String_counter::counter_ = 0;
const std::string String_counter::prefix_ = "s";
std::string String_counter::value_ = prefix_ + std::to_string(counter_);
int main()
{
    std::cout << String_counter::value() << std::endl;
    {
        String_counter c1;
        std::cout << String_counter::value() << std::endl;
        {
            String_counter c2;
            std::cout << String_counter::value() << std::endl;
        }
        std::cout << String_counter::value() << std::endl;
    }
    std::cout << String_counter::value() << std::endl;
    return 0;
}

输出:

$ g++ -std=c++11 main.cpp -o prog$ ./progs0S1S2S1s0

请参阅演示@http://ideone.com/HaFkWn。

(请注意,这不是线程安全的)。