任何一個可以幫助解釋下面的構造是如何工作是已知的,結構串像文字,其大小在編譯時
class StringData {
public:
/**
* Constructs a StringData explicitly, for the case of a literal whose size is known at
* compile time.
*/
struct LiteralTag {};
template<size_t N>
StringData(const char (&val)[N], LiteralTag)
: _data(&val[0]), _size(N-1) {}
private:
const char* _data; // is not guaranted to be null terminated
mutable size_t _size; // 'size' does not include the null terminator
}
爲什麼不直接使用此構造對象嗎?
StringData(const char *c):_data(c){}
完整的源代碼可以在這裏找到:http://api.mongodb.org/cplusplus/1.7.1/stringdata_8h_source.html
因爲那個不設置大小... – chris 2013-03-19 03:03:28
@chris我可以輕鬆地將大小添加到第二個。爲什麼不添加_size = strlen(c);在身體裏?是否有必要創建如此複雜的構造函數來克服大小? – JiuDong 2013-03-19 03:29:12
雖然分配量很大,但它會節省大量時間,而不是'strlen',它應該遍歷每個字符串的末尾 – borisbn 2013-03-19 03:40:09