有人告诉我将整个应用程序字符串放在const而不是内联。
为什么?
是否会缩短编译时间?运行?或者只是代码标准?
示例
而不是写作:
selectSingleNode.InnerText == "SomeString"
写
selectSingleNode.InnerText == SOME_CONST
答案 0 :(得分:3)
纯粹为了可维护性和可读性而这样做。使用命名常量而不是字符串文字将不会对性能产生任何影响。
<强>可维护性强>
如果代码中有多个位置需要相同的字符串文字,让它们全部使用相同的命名常量会使代码更易于维护。如果您决定需要更改字符串文字的值,则只需要一个地方进行更改。
<强>可读性强>
即使您的字符串文字在一个地方使用,提供命名常量也可能使您的代码更具可读性。
例如,在下面的示例中,您认为哪个版本更清楚地传达了意图?
void reverse_print(Node* n)
{
if (n != NULL)
{
reverse_print(n->next);
std::cout << n->value << ' ';
}
}
void reverse_print(List* s)
{
reverse_print(s->first);
}
一个正确选择的常量名称可以使代码的意图更清晰。但关键在于你必须选择一个好名字。很多时候,我会看到类似的东西:
// string literals
int startIdx = someString.IndexOf("[");
int endIdx = someString.IndexOf("]");
// vs. named constants
int startIdx = someString.IndexOf(TAG_START);
int endIdx = someString.IndexOf(TAG_END);
这是一个选择得非常糟糕的常量名称,它不会对可读性有所帮助。问题是它只是简单地说明了字符串文字的内容,相反,它应该传达字符串文字的用途。
答案 1 :(得分:0)
我已经看过一些测试,其中开发人员测试了执行时间和使用const和非const字符串之间生成的IL。确实,使用const可以获得最轻微的性能提升(虽然除非你为美国宇航局或华尔街工作,但是微不足道)真正的好处是:
这并不详尽,我也很想知道其他人发布的内容。希望这至少有帮助。