gpt4 book ai didi

c++ - 为什么编译器不能优化这个 std::string 结构?

转载 作者:行者123 更新时间:2023-11-30 03:23:02 25 4
gpt4 key购买 nike

考虑以下代码:

#include <string>
#include <cstring>

size_t foo(const char* cptr)
{
if (cptr == nullptr) { return 0; }
return strlen(cptr);
}

size_t bar()
{
static const char* cptr { "Hello world" };
return std::string{cptr}.length();
}

size_t baz(const char* cptr)
{
if (cptr == nullptr) { return 0; }
return std::string{cptr}.length();
}

使用 GodBolt,我们 can see GCC 8.1 和 Clang++ 6.0 可以优化 bar() 中的 std::string,但不能优化 baz()。在 baz() 中,虽然编译器不能返回固定值,但它绝对可以只运行检查字符串长度的代码,而不构造任何东西,或者至少不完成构造 - 即行为类似到 foo()。为什么要完整构造字符串?

最佳答案

baz编译器不知道什么 cptr指向因此它必须构造一个字符串来获取它的大小。

bar编译器知道什么 cptr指向 "Hello world"因此它可以取代字符串创建和对 size 的调用与字符串的大小。

关于c++ - 为什么编译器不能优化这个 std::string 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50686272/

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