gpt4 book ai didi

c++ - 从编译时已知大小的文字构造类似对象的字符串

转载 作者:行者123 更新时间:2023-11-28 03:20:47 25 4
gpt4 key购买 nike

任何人都可以帮助解释以下构造函数的工作原理,

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

最佳答案

使用 StringData(const char *c):_data(c){} 您将不知道大小,或者必须使用 strlen 计算大小运行。除非 char 数组以 null 结尾(以 char '\0' 结尾),否则这将不起作用。

使用模板版本,编译器将在编译时计算出数组的大小,并正确初始化 size 成员。构造函数接受对固定大小数组的引用,编译器将根据您传递给构造函数的实际数组(和大小)实例化一个匹配的构造函数。这一切都发生在编译时,并且不太容易出现人为错误。

关于c++ - 从编译时已知大小的文字构造类似对象的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15490783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com