我需要初始化变量并测试其值。 最有效的方法是什么?
char *key = get_key(item);
if (key != NULL) { // do something }
OR
char *key;
if (key = get_key(item)) { // do something }
副作用是否会产生某些优势? 谢谢!
答案 0 :(得分:3)
啊,好的''最有效的方式'...... 不。不。忘记效率。
即使存在差异,这很可能是过早的优化。但在这种特殊情况下,唯一的区别在于术语(从技术上讲,你的第二个例子不是初始化,而是赋值表达式),你的编译器几乎肯定会从两段代码中生成完全相同的汇编程序。
答案 1 :(得分:2)
在您的简单程序中,要问的问题是:您是否会重复使用该作业?分配的成本将是一个内存存储。如果没有使用,那么我只是不添加商店的成本。无论如何,编译器可能正在这样做,但帮助它并没有伤害:-)
如果您打算重用密钥,那么我个人不希望在if()中不在声明步骤中进行,以提高可读性。所以,我会采取第二种方式,但保持分配不在if()。
答案 2 :(得分:0)
对于您的具体示例,可能没有区别。构建两者并比较生成的代码以进行检查。
答案 3 :(得分:0)
独立声明(char *key;
)根本不产生任何代码,因此很可能两个代码片段都会产生相同的生成代码,但可以说第一个片段更容易阅读。
答案 4 :(得分:0)
问问自己效率是否重要。 (回答:极不可能)
寻求可读性。考虑到这一点,在if条件中做一个赋值是有问题的,所以我更倾向于第一个版本。
答案 5 :(得分:0)
两个代码段在行为上都是等效的。
我个人不喜欢第二个,因为if
语句的控制表达式中的副作用往往会使代码的可读性降低,特别是当使用赋值进行副作用时。这就是为什么像Python这样的语言禁止在if
语句的控制表达式中使用赋值运算符的原因之一(出错的倾向)。
这就是说,我也不喜欢初始化时的副作用(第一个代码片段中声明中的函数调用)。