当您的类具有静态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 $ ./prog s0 s1 s2 s1 s0
参见演示@ http://ideone.com/HaFkWn。
(请注意,这不是线程安全的)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句