2014-03-05 68 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