如果您有一個可以初始化它的靜態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