- 论坛徽章:
- 0
|
为什么我的指针函数返回的值不对?
如果用这个例子说明的话……
int* getP() 到底是用来做什么的呢?
假如是为了每次都返回一个固定的点,并且允许调用者直接修改返回结果,影响下次调用返回的点的值,就可以直接这样修改:
- #include <iostream>;
- int *getP()
- {
- static int a = 100;
- return & a;
- }
复制代码
如果作者的目的只是希望在某个时候,可以修改返回结果所指向的内存,而多次调用都返回相同的点值,就应该该为:
- #include <iostream>;
- int *getP()
- {
- static int a;
- a = 100;
- return & a;
- }
复制代码
假如程序稍微复杂一些,就可能导致混淆。
假如在定义一些类方法的时候,使用这样的技巧,就更加容易出错。
在某些极端的情况下,几乎根本就写不对,比如:
- class rational
- {
- ……
- };
- inline const rational& operator*(const rational& lhs,
- const rational& rhs)
- {
- static rational result; // 将要作为引用返回的
- // 静态对象
- lhs和rhs 相乘,结果放进result;
- return result;
- }
复制代码
在下面代码中调用:
- bool operator==(const rational& lhs, // rationals的operator==
- const rational& rhs); //
- rational a, b, c, d;
- if ((a * b) == (c * d)) {
- 处理相等的情况;
- } else {
- 处理不相等的情况;
- }
复制代码
上面的例子摘自〈effective c++〉。在任何情况下,if语句永远为true。
如果一个大型程序里布满这样的函数,对谁都是噩梦。:( |
|