2014-03-05 73 views
0

如果您有一個可以初始化它的靜態int成員的類,並且每次創建此類的新實例時您都可以遞增int值,則可以使用 。初始化C++中的靜態字符串成員

我想要做的是我有一個靜態字符串成員,所以我用「s」 初始化它,但我想連接一個數字,每次創建該類的新實例時都會遞增。

,使得用於第一實例的靜態字符串值將是「S1」,第二個「S2」等。

是有可能與靜態字符串構件的initialize做呢?

+1

不是你想要的答案,但你可以使用一個'靜態int',你增加你說的方式,然後在構造函數中用''s''串聯起來 – EoiFirst

+0

是啊,這是我的想法,但我想知道是否有更簡單的方式就像在Java中你知道的.. :) – Elior

+0

@Elior什麼是Java方式? – Angew

回答

2

只是爲了澄清變量的初始化只發生一次。變量的後續更改是賦值。

請求的行爲是可能的,最簡單的方法是有一個附帶的static int counterstatic 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

(注意這不是線程安全的)。

+0

是啊,這是我的想法,但我想知道是否有更簡單的方式就像在Java中你知道.. :) – Elior