gpt4 book ai didi

ada - Ada 95 中的 if 和 elsif 优化

转载 作者:行者123 更新时间:2023-12-01 04:35:39 26 4
gpt4 key购买 nike

我正在从事一个我不太熟悉的基于 Ada 的项目,我刚刚看到一些乍一看似乎效率低下的东西,当然这一切都取决于编译器可能会做什么。

if Ada.Strings.Fixed.Trim
(Source => Test_String,
Side => Ada.Strings.Both) =
String_1 then
--Do something here
elsif Ada.Strings.Fixed.Trim
(Source => Test_String,
Side => Ada.Strings.Both) =
String_2 then

--Do something else here
end if;

我觉得调用 Trim 过程并将结果存储在 String 变量中,然后在 if 语句的每个条件中针对不同的 String 进行测试会更有效,特别是如果要检查的条件很多(不要介意使用二进制搜索可能会更好)。当然,我可能是错的,所以我的问题是,Ada 中是否有一些我不知道的编译时优化,可能导致 Trim 函数只被调用一次,并且只在每个条件下测试结果if 语句?

最佳答案

那将是编译器相关的,而不是语言相关的。当然,GNAT GPL 2013 在 -O2-O3 调用了两次 Trim

你(和我)的直觉似乎是正确的:修剪一次并存储结果......

Trimmed : constant String :=
Ada.Strings.Fixed.Trim (Source => Test_String, Side => Ada.Strings.Both);

...虽然我个人会写

Trimmed : constant String :=
Ada.Strings.Fixed.Trim (Test_String, Side => Ada.Strings.Both);

理由是在这种情况下,没有人应该需要命名参数关联来阐明程序员的意图!

关于ada - Ada 95 中的 if 和 elsif 优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20696323/

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