Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在本机C++;班_C++_String - Fatal编程技术网

C++ 在本机C++;班

C++ 在本机C++;班,c++,string,C++,String,因此,我们有一个自定义字符串类,它只包装一个基本的C字符串:char*或wchar\u t*。自定义字符串类的唯一数据成员是这个指针。无论如何,在工作中,我们正在讨论添加另一个缓存内部字符数组长度的成员。所以不是 MyString::Count{return _tcslen(foo);} 我们可以这样写: MyString::Count{return m_Count;} 但我相信如果我们那样做的话,会有一种特别的抓到我们的东西。你知道,有一些特殊的方法来打破这样一个实现。所以我的问题是,缓存长度

因此,我们有一个自定义字符串类,它只包装一个基本的C字符串:char*或wchar\u t*。自定义字符串类的唯一数据成员是这个指针。无论如何,在工作中,我们正在讨论添加另一个缓存内部字符数组长度的成员。所以不是

MyString::Count{return _tcslen(foo);}

我们可以这样写:

MyString::Count{return m_Count;}


但我相信如果我们那样做的话,会有一种特别的抓到我们的东西。你知道,有一些特殊的方法来打破这样一个实现。所以我的问题是,缓存长度有什么缺点?

缓存长度没有真正的缺点。string类做同样的事情。这还允许您选择在数据中存储NUL字符


只要确保您的数据和缓存的值始终通过访问器和可能受保护的数据成员保持同步。

缓存长度没有真正的缺点。string类做同样的事情。这还允许您选择在数据中存储NUL字符


只要确保您的数据和缓存值始终通过访问器和可能受保护的数据成员保持同步。

如果有人在不调用特殊的“更新计数”函数的情况下更改字符串内容,该怎么办?此时,您保存的计数与字符串本身不同步,这可能会导致各种问题,包括崩溃。

如果有人在不调用特殊的“更新计数”函数的情况下更改字符串内容,该怎么办?此时,您保存的计数和字符串本身不同步,这可能会导致各种问题,包括崩溃。

第一件事:除非您有分析数据显示这确实是一个瓶颈,否则不要这样做。如果您没有这样做,那么您所有人都在浪费时间争论这个IMO。首先要使您的代码正确,然后攻击重要的瓶颈

如果确实缓存了它,请确保可以修改内部字符串的所有路径也相应地更新了
m_计数


如果您的包装器发出一个非常量引用或指向数据的指针,不要缓存它-您无法确定该值是否会保持不变。

第一件事:除非您有分析数据显示这确实是一个瓶颈,否则不要这样做。如果您没有这样做,那么您所有人都在浪费时间争论这个IMO。首先要使您的代码正确,然后攻击重要的瓶颈

如果确实缓存了它,请确保可以修改内部字符串的所有路径也相应地更新了
m_计数


如果您的包装器发出一个非常量引用或指向数据的指针,不要缓存它-您无法确定该值是否会保持不变。

“因此我们有一个自定义字符串类,它只包装一个基本的C字符串”OhGoDwhy标准字符串/wstring有什么问题!?让我们说它是旧的遗留代码。所以我们有一个定制的string类,它只包装了一个基本的C字符串“OhGodWhy标准字符串/wstring有什么问题?”!?让我们说它是旧的遗留代码。可能也早于STL。C++的std::string不会“缓存”长度。存储的长度是字符串长度的最终权限。C++的std::string不会“缓存”长度。存储的长度是字符串长度的最终权限。因此,例如,如果您发出一个指向字符串内部内容的指针(即const char*GetData()),然后在字符串类之外修改指针,则完全正确。你确定没人会那样做吗?如果不是的话,在进行优化之前你需要检查一下。哦,我肯定获取内部的访问器函数被大量使用…问题是,C Johnson,是否使用访问器函数修改内部,然后,它是否用于修改内部结构,以使字符串的计算长度发生变化。如果
\0
字符的数量从未更改,则缓存长度是安全的。例如,如果您将指针交给字符串的内部内容(即const char*GetData()),然后在字符串类之外修改指针,则完全正确。你确定没人会那样做吗?如果不是的话,在进行优化之前你需要检查一下。哦,我肯定获取内部的访问器函数被大量使用…问题是,C Johnson,是否使用访问器函数修改内部,然后,它是否用于修改内部结构,以使字符串的计算长度发生变化。如果
\0
字符数从未更改,则可以安全地缓存长度。