神奇的“const”

const 是C语言里的一个很重要的关键字,其作用是限定一个变量不应该被改变,一定程度上能提高程序的健壮性,为什么说它神奇呢?因为const可被施加在任何作用域内的对象、函数参数、函数返回类型以及成员函数本身,如此多的用法经常闹乱,今天决定好好组织一下留做备用。

    先来个简单的,修饰变量的:

char test[] = "test const";
const char *p = test;    //test 是常量
char const *p = test;    //test 是常量
char *const p = test;    //p 指针是常量

规律:const 出现在星号左边,标示所指的事物事常量;const 出现在星号右边,表示指针自身是常量。

    再来,const最具威力的用法是对函数声明时的应用,在一个函数声明中,const可以和函数的返回值、各个参数以及函数自身(需要是类的成员函数)产生关系。

先看一个我们最常见的:

//获得两个点的距离,Vector3是个三维坐标点类

int distance(const Vector3& pos1, const Vector3& pos2);

这类函数是我们经常用到的,为了防止Vector3不必要的构造函数,减少程序开销,我们参数传入了引用(为什么以后再说跟这里没关系不再赘述),为什么是const 类型的?因为我们一般不希望这两个引用类型的变量在函数里被修改,这个跟上面说的指针差不多。

还有一种是:

cosnt Vector3& getPosition();

这个函数一般用在获得某个类型对象的当前位置的,但是为了防止该位置在外部被修改,我们把返回值声明称const类型。

最后一种:

class Test

{

public:

……

cosnt Vector3& getPosition() const;

};

看第二个const,这个const 成员函数的作用就是防止在该函数内部修改任何对象的成员变量值。

  先写这么多吧,太累了。

 

   

### 一些有趣的编程技巧和代码示例 #### 巧妙利用Python列表推导式 列表推导式提供了一种简洁的方式来创建列表。下面的例子展示了如何使用列表推导式来生成斐波那契数列中的前n个偶数值。 ```python def fibonacci_even(n): fib = [0, 1] even_fib = [fib[i] for i in range(2, n*3) if (fib.append(fib[-1]+fib[-2]) or fib[i]%2==0)] return even_fib[:n] print(fibonacci_even(5)) ``` 这段代码通过巧妙地结合`append()`方法与条件表达式,在单行内实现了复杂逻辑[^1]。 #### Python装饰器实现函数计时功能 装饰器是Python中非常强大的特性之一,可以用来修改现有函数的行为而无需改变其源码。这里给出一个简单的例子,用于计算被修饰函数执行所需的时间: ```python import time from functools import wraps def timer_decorator(func): @wraps(func) def wrapper(*args,**kwargs): start_time=time.time() result=func(*args,**kwargs) end_time=time.time() print(f"{func.__name__} took {end_time-start_time:.8f}s to execute.") return result return wrapper @timer_decorator def test_function(): sum(x*x for x in range(1_000_0)) test_function() ``` 此段程序定义了一个名为`timer_decorator`的装饰器,并将其应用于另一个函数上以测量运行时间[^2]。 #### JavaScript闭包保存状态变量 JavaScript支持闭包的概念,允许内部函数访问外部作用域内的参数和变量。这使得我们可以轻松创建具有私有属性的对象实例。如下所示的是一个简单计算器类的实现方式: ```javascript function Calculator(initValue){ let value = initValue; function add(num){value += num;} function subtract(num){value -= num;} function multiply(num){value *= num;} function divide(num){if(num!=0)value /= num;else throw new Error('Division by zero!');} function getValue(){return value;} return { add, subtract, multiply, divide, getValue }; } const myCalc=new Calculator(1); myCalc.add(9);console.log(myCalc.getValue()); // Output: 10 myCalc.subtract(4);console.log(myCalc.getValue());//Output: 6 ``` 上述代码片段演示了如何运用闭包机制构建具备基本运算能力的小型计算器对象[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值