当你有一个带有静态int成员的类时,你可以初始化它 每次创建此类的新实例时,都可以增加int值。
我想要做的是我有一个静态字符串成员所以我用“s”初始化它 但是我希望连接一个在每次创建类的新实例时都会增加的数字。
这样,对于第一个实例,静态字符串值将是“s1”,第二个“s2”等。
是否可以通过初始化静态字符串成员来实现?
答案 0 :(得分:3)
只是为了澄清变量的初始化只发生一次。对变量的后续更改是分配。
请求的行为是可能的,最简单的方法是随附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 $ ./prog s0 s1 s2 s1 s0
见demo @ http://ideone.com/HaFkWn。
(注意这不是线程安全的)。