【发布时间】:2018-06-21 05:59:01
【问题描述】:
我做了一个模板字符串操作类,可以操作std::string和MFC CString。 它在调试版本上运行良好。 它确实适用于发布版本。 通过调查,我发现至少优化了一项有用的功能。 checkChars 经过优化,应该在拆分中调用。 (没有调用 checkChars。)
static bool checkChars(const TCHARTYPE& c, const TCHARTYPE* chrs)
{
for ( ;*chrs ;chrs++)
{
if (c == *chrs)
{
return true;
}
}
return false;
}
void split(const TSTRING& s, vector<TSTRING>& v, const TCHARTYPE* separator, bool bKeepEmptyParts = false)
{
...
//here at() is called, but checkChars isn't
if (checkChars(at(s, i), separator))
...
}
VS 优化是
最大化速度 (/O2)
。我发现有用
自定义
可以防止优化我的有用功能。 但是我想知道为什么,又不想更改项目设置,我可以只修改我的代码使其工作吗?
编辑:
很久之后,我意识到真正的问题不是优化,而是“at()”函数没有返回预期的字符引用。这里的 TSTRING 是 CString MFC,它不返回 TCHAR 引用。编译器发现这行不通,所以“优化”了它。
【问题讨论】: