gpt4 book ai didi

c# - 在 C# 中添加字符串,编译器是如何做到的?

转载 作者:太空狗 更新时间:2023-10-29 20:45:46 25 4
gpt4 key购买 nike

A = string.Concat("abc","def") 

B = "abc" + "def"

A 与 B

最近我一直很困惑,为什么很多人会说 A 肯定比 B 的处理速度快得多。但是,问题是他们只是说因为有人这么说或者因为它就是这样。我想我可以从这里听到更好的解释。

编译器如何处理这些字符串?

谢谢!

最佳答案

加入 C# 编译器团队后,我做的第一件事就是重写了字符串连接的优化器。好时光。

如前所述,常量字符串的字符串拼接是在编译时完成的。非常量字符串做一些奇特的事情:

a + b --> String.Concat(a, b)
a + b + c --> String.Concat(a, b, c)
a + b + c + d --> String.Concat(a, b, c, d)
a + b + c + d + e --> String.Concat(new String[] { a, b, c, d, e })

这些优化的好处是 String.Concat 方法可以查看所有参数,确定它们的长度之和,然后生成一个可以容纳所有结果的大字符串。

这是一个有趣的例子。假设您有一个返回字符串的方法 M:

s = M() + "";

如果 M() 返回 null,则结果为空字符串。 (null + empty 为空。)如果 M 不返回 null,则结果不会因空字符串的串联而改变。因此,这实际上被优化为根本不调用 String.Concat!变成了

s = M() ?? ""

整洁,嗯?

关于c# - 在 C# 中添加字符串,编译器是如何做到的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4757828/

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