gpt4 book ai didi

string - 编译器是否优化字符串连接?

转载 作者:行者123 更新时间:2023-12-03 15:21:14 28 4
gpt4 key购买 nike

在我的代码中,有些情况下我正在构建一个大字符串,例如复杂的 SQL 语句。我打算连续多次将这段文本放在一起,每次都有一些略有不同的参数。我已经习惯使用名为 procedure A(const S: String); 的子例程,它只是将文本 (S) 附加到较大的字符串 文本 := 文本 + S + #10 + #13;

我想知道与使用传统的字符串连接相比,这是否会影响性能?我开始认为编译器优化了这样的东西:

Text := 'some' + ' ' + 'text' + ' ' + 'and' + ' ' + 'such';

Text := 'some text and such';

这是真的吗?编译器是否优化了这种情况?如果是这样,我可能会决定将所有内容更改为如下所示:

Text := 'select something from sometable st'+#10+#13+
'join someothertable sot on sot.id = st.sotid'+#10+#13+
'where sot.somevalue = 1'+#10+#13+
'order by sot.sorting';

理论上这会比

Text:= Text + 'select something from sometable st'+#10+#13;
Text:= Text + 'join someothertable sot on sot.id = st.sotid'+#10+#13;
Text:= Text + 'where sot.somevalue = 1'+#10+#13;
Text:= Text + 'order by sot.sorting';

或者我通常是如何做的:

A('select something from sometable st');
A('join someothertable sot on sot.id = st.sotid');
A('where sot.somevalue = 1');
A('order by sot.sorting');

最佳答案

像这样的表达式

'a' + 'b'

在编译时评估。这意味着任务

str := 'a' + 'b';

产生相同的编译代码

str := 'ab';

另一方面,对于

str := 'a';
str := str + 'b';

串联是在运行时执行的。

关于string - 编译器是否优化字符串连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13552278/

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