找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
首页论坛EAHub 外汇论坛
查看: 13|回复: 0

const在MT5的用法

[复制链接]

4万

主题

54

回帖

4万

积分

管理员

积分
45954
发表于 2026-8-23 05:30:00 | 显示全部楼层 |阅读模式
const名叫常量限定符,用来限定特定变量,以通知编译器该变量是不可修改的。习惯性的使用const,可以避免在函数中对某些不应修改的变量造成可能的改动。

1.const修饰基本数据类型

1.1 修饰一般常量及数组  int const arr[2]={1,2} 等价与 const int arr[2]={1,2}

1.2 修饰指针(*)


顶层const 和 底层const,前者(比如int* const p=a,本质是一个常量型的指针,常量指针)可以表示任意对象的常量(指针、引用、int、double都可以),后者(比如const int* p=a,指针所指的对象是常量,指针常量)只有指针和引用等复合类型可以是。

根据const位于星号*的左右侧,有通俗理解:左定值,右定向,const修饰不变量。

当执行对象的拷贝操作时,拷入和拷出的对象必须具有相同的底层const资格,或者两个对象的数据类型必须能够转换才行。一般来说,非常量可以转换成常量,反之则不行。

2.const 修饰函数


const 在函数中根据修饰的位置分为三种:函数参数、函数返回值、成员函数。

const int fun(const int a) const;


2.1 如果输入参数为指针,如

void stringcopy(char* strdest, const char* strsource);


加上const之后就会起保护指针意外修改的作用。实参中,指针会指向一段内存地址,调用函数之后,函数会产生一个临时指针变量,这个变量的地址与实参的地址不一样,但是这两个指针指向的内存是同一块。加上const修饰后,如刻意修改这一内存,编译器会报错。

2.1 如果输入参数为引用(引用是某个实例的别名,程序为指针变量分配内存区域;而不为引用分配内存区域),加上const 之后既起到了保护作用,也提高了程序效率。调用void func(A a)  ,其中A是用户自定义的类型。程序会产生一个临时对象,随后调用拷贝构造函数,当函数结束的时候,进行析构释放资源。如果改成引用void func(A &a); 只是相当于实参的一个别名,不会产生临时变量,所以自定义类型,建议用引用作为函数形参。


2.2 const修饰返回值。 值传递是没有必要用此修饰。返回值是指针,接收的变量也必须是const修饰,如


const char* func(); const char* sr=func();


2.3 const 修饰的成员函数(void func(int x) const;)为了保护成员变量,要求const 函数不能修改成员变量,否则编译会报错。只有成员函数才可以在后面加const,普通函数后加const无意义。

const函数的规则:

   1. const 对象只能访问const 成员函数,非const 的对象可以访问任何成员函数,包括const 成员函数。

    2.如果函数名、参数、返回值都相同的const成员函数和非const成员函数是可以构成重载,那么const对象调用const成员函数,非const对象默认调用非const的成员函数。

    3.const成员函数可以访问所有成员变量,但是只能访问const的成员函数。

    4.非const成员函数,可以访问任何成员,包括const成员成员函数。

    5.const成员函数不能修改任何的成员变量,除非变量用mutable修饰。


const全局变量在其他文件中是不可见的,这和添加了static关键字的效果类似。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|EAHub外汇论坛

GMT+8, 2026-10-12 13:36 , Processed in 0.137208 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表