繁体   English   中英

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

[英]initialize static string member in c++

当您的类具有静态int成员时,可以对其进行初始化,并且每次创建此类的新实例时,都可以增加int值。

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

这样,第一个实例的静态字符串值将为“ s1”,第二个实例的“ s2”等。

用静态字符串成员的初始化可以做到吗?

只是为了澄清变量的初始化仅发生一次。 变量的后续更改是分配。

所请求的行为是可能的,最简单的方法是具有一个随附的static int counterstatic 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
$ ./prog 
s0
s1
s2
s1
s0

参见演示@ http://ideone.com/HaFkWn

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM