引用:
作者: sjinny 手边没有典型的例子。我这么说吧:
在C里,花括号是对生命期的一种表达符号,无论是函数的,还是if、for的,或者单独的花括号对,它们都表达了一种嵌套的生命期。
一个极端的例子:一个函数里的内部变量是不会泄露到外面的,所以使用这个函数时要关注的仅仅是它的接口。但是如果没有用花括号来说明那些内部变量的生命期,那么意味着它们是可能泄漏到函数外的。虽然在外界操纵函数的内部变量是不好的,但是在没有明确限制的情况下,一个设计不好的接口很可能就会把内部变量泄漏出去,特别是类的成员函数,这就破坏了封装性。而函数内部的花括号对,其实也是类似于函数的微观模块。
想了半天没想出什么例子,毕竟还没看过一点显式生命期控制/描述都没有的语言……
我那段话的意思只是说:应该赋予程序员尽量强大的表达工具,机器分析只是起弥补的作用。如果不要求程序员给出丰富的描述信息,然后再让程序来猜,那就不好了。
各种自动化技术是在帮助程序员,但是如果开始替代程序员,那就走向反面了。一直到现在,语言里仍然保留了goto。一直到现在C++也仍然保留了内嵌汇编的能力。 |
你觉得下面的c代码中,i这个栈变量一定是在花括号结束的地方才失效的?
代码:
{
int i = 1;
int j = i;
cout << j;
}
不熟悉寄存器分配算法吧?