如果您有一个可以初始化它的静态int成员的类,并且每次创建此类的新实例时您都可以递增int值,则可以使用 。初始化C++中的静态字符串成员
我想要做的是我有一个静态字符串成员,所以我用“s” 初始化它,但我想连接一个数字,每次创建该类的新实例时都会递增。
,使得用于第一实例的静态字符串值将是“S1”,第二个“S2”等。
是有可能与静态字符串构件的initialize做呢?
如果您有一个可以初始化它的静态int成员的类,并且每次创建此类的新实例时您都可以递增int值,则可以使用 。初始化C++中的静态字符串成员
我想要做的是我有一个静态字符串成员,所以我用“s” 初始化它,但我想连接一个数字,每次创建该类的新实例时都会递增。
,使得用于第一实例的静态字符串值将是“S1”,第二个“S2”等。
是有可能与静态字符串构件的initialize做呢?
只是为了澄清变量的初始化只发生一次。变量的后续更改是赋值。
请求的行为是可能的,最简单的方法是有一个附带的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。
(注意这不是线程安全的)。
是啊,这是我的想法,但我想知道是否有更简单的方式就像在Java中你知道.. :) – Elior
不是你想要的答案,但你可以使用一个'静态int',你增加你说的方式,然后在构造函数中用''s''串联起来 – EoiFirst
是啊,这是我的想法,但我想知道是否有更简单的方式就像在Java中你知道的.. :) – Elior
@Elior什么是Java方式? – Angew