![]() |
1
4
我不知道
此函数的旧版本是
除了windows api之外,还有其他方法可以做同样的事情。如果你瞄准C++ 17,那就是
您对这种方法的性能表示关注。这是胡说八道。
从字符串中剥离某些字符不是一个缓慢的操作。
如果从字符串的开头开始搜索,然后在找到文件规范后,再次从字符串的开头开始复制该字符串,甚至不会很慢。它是一个简单的循环,通过一个合理长度的字符串的字符进行搜索,然后
但是,实施可能不会那么幼稚。您可以从
结束
减少需要遍历的字符数,如果允许操作原始字符串,则可以完全避免任何类型的内存复制。使用c样式的字符串,只需用nul字符替换后面的路径分隔符(分隔路径规范开头的分隔符)(
事实上,如果你 真正地 关心性能,实际上 放心 比从文件对象中检索包含文件夹的系统调用更快。 系统调用比某些编译器生成的、不可内联的代码要慢得多,这些代码可以遍历字符串并去掉子字符串。
一旦找到目录的路径,就可以获得
你的尺寸不对。要么你犯了一个常见的错误,基准测试一个调试构建,其中的标准库功能(例如,
注意,如果您还没有路径,那么从
正如在问题的注释中已经提到的,您可以通过分配一个长度为
注意,对于最大的健壮性,特别是在Windows 10上,要处理路径比
此外,eryksun(在对这个答案的评论中)指出,尽管方便,
如果您已经按照描述编写了代码,但仍有可测量的性能问题,请将该代码发布给其他人以供审阅和帮助您优化。这个 Code Review 堆栈交换站点是一个很好的地方,可以在工作代码上获得类似的帮助。请在这个答案下面的评论中给我留下这样一个问题的链接,这样我就不会错过了。
不管你做什么,
拜托
停止调用Windows API函数的ANSI版本(以
在那里
可以
做你想做的事(通过
一如既往,如果您提供了更详细的大局,我们可能会提供一个更合适的解决方案。这就是评论人士在提到xy问题时所说的。是的,人们质疑你的动机,因为这是我们提供最适当帮助的方式。 |
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 6 月前 |
![]() |
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 6 月前 |
![]() |
Bobby · 复合字面值总是左值吗? 6 月前 |
![]() |
9-Pin · C: 嵌套结构的堆栈内存分配 6 月前 |