在 C++ 中初始化静态字符串成员
initialize static string member in c++
当你有一个带有静态 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。
(请注意,这不是线程安全的)。
相关文章:
- 使用 const char* 初始化 const ref 字符串成员时幕后会发生什么
- 具有字符串成员的结构的动态数组
- 为什么在类体中无法启动静态常量字符串成员
- 引用字符串成员变量
- 不能将类模板中使用的对象的字符串成员变量分配给C++
- 在C#中,是否有与INT和字符串成员变量相当的C 联合
- 清理所拥有的(!)字符串成员时,析构函数偶尔崩溃
- C :方法中的字符串成员别名
- 在 C++ 中初始化静态字符串成员
- C++如何访问结构列表的字符串成员
- 如何引用结构字符串成员
- const字符串成员的错误:没有适当的默认构造函数可用
- C 字符串成员函数subtr使用
- 使用字符串成员函数格式化SSN
- C++ vector 中不存在的字符串成员变量
- 如何在 c++ 中的类中声明字符串成员
- 使用函数调用初始化字符串成员c++
- C++ 不能将公共 const 字符串成员作为参数传递给同一类的成员函数
- 类中包含的 STL 字符串成员包含在 std::vector 中
- 如何从 char 数组中提取数字字符串成员