c语言问题,这些函数后边跟个const 什么意思 求解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言问题,这些函数后边跟个const 什么意思 求解相关的知识,希望对你有一定的参考价值。
const 限定符,它把一个对象转换成一个常量。1.》》const与define。两者都可以用来定义常量,但是const定义时,定义了常量的类型,所以更精确一些。#define只是简单的文本替换,除了可以定义常量外,还可以用来定义一些简单的函数,有点类似内联函数(Inline)。const和define定义的常量可以放在头文件里面。(小注:可以多次声明,但只能定义一次)
2.》》const与指针和引用。
(a)const与指针。
先来看看下面的几种定义:
intme;
constint*p1=&me;//p1可变,*p1不可变,此时不能用*p1来修改,但是p1可以转向
int*constp2=&me;//p2不可变,*p2可变,此时允许*p2来修改其值,但是p2不能转向。
constint*constp3=&me;//p3不可变,*p3也不可变,此时既不能用*p3来修改其值,也不能转向
(b)指针和引用的区别很简单,就是引用更简洁,更安全。因为引用声明时必须初始化。 引用更接近const指针,一旦与某个变量关联,就将一直效忠于他。
(c)const指针可以接受const和非const地址,但是非const指针只能接受非const地址。所以const指针的能力更强一些,所以尽量多用const指针,这是一种习惯。
3.》》(a)const与函数。由于2(c),所以经常把函数的形参类型设为const,而且多为const 引用。但是这里有一个限制,不能把不是左值的地址传递给引用。(左值包括变量,数组元素,结构成员,引用,被解除引用的指针等)。 形参是const类型的,说明该函数将不会修改其值,该函数便为const函数。
(b)const与类成员函数。先看看下面这段代码:
constStockland=Stock("hyd");
land.show();
land 是常量,但是类成员函数show无法保证不修改land,所以编译器将拒绝执行该段代码。除非你能保证show像const函数一样,但这需要另外一种语法,即:
void show() const; //声明
void Stock::show() const //定义 参考技术A void function() const
回到顶部
void function() const
通常我们会看到一些函数声明后面会跟着一个const,这个const是做什么的呢?
看一下下面的例子,就知道了。直接在编译前,就会提示下面的两个错误
// test1107.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class aa
int num;
public:
aa()
int b =10;
num = b;
;
void out1()
cout<<num<<endl;
void out2() const
cout<<num<<endl;
void out3() const
num+=10; //出错,const函数不能修改其数据成员
cout<<num<<endl;
;
int _tmain(int argc, _TCHAR* argv[])
aa a1;
a1.out1();
a1.out2();
a1.out3();
const aa a2;
a2.out1(); // 错误,const的成员 不能访问非const的函数
a2.out2();
a2.out3();
return 0;
在类成员函数的声明和定义中,
const的函数不能对其数据成员进行修改操作。
const的对象,不能引用非const的成员函数。
这儿的const就是说这个函数操作不会对变量或是对象之类的值有影响 比如、有一个human类 ,现在要得到某个human类对象A的age 那么肯定是不会因为想得到这个值而改变了age的大小,那么就可以写一个函数int getAge()const这样就好 这么做是为了防止在函数中对不应该在这里改变的量不小心进行了改变 参考技术B 常成员函数..........不造嚒
C++在函数声明时,后面跟个const是啥意思?
如:
有下面的函数声明:
double d() const;
其中的“const“有什么用?是什么意思?请举例说明下什么时候用这种形式?
谢谢!!!
const是一个C语言(ANSI C)的关键字,具有着举足轻重的地位。它限定一个变量不允许被改变,产生静态作用。
使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一定帮助。另外CONST在其它编程语言中也有出现,例如Pascal、C++、PHP5、B#.net、HC08 C、C#等。
const的作用:
1、可以定义const常量,具有不可变性。
例如:const int Max=100; Max++会产生错误;
2、便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。
例如: void f(const int i) ......... 编译器就会知道i是一个常量,不允许修改;
3、可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。 同宏定义一样,可以做到不变则已,一变都变!
如1中,如果想修改Max的内容,只需要它修改成:const int Max=you want;即可!
4、可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。 还是上面的例子,如果在函数体内修改了i,编译器就会报错;
例如: void f(const int i) i=10;//error!
5、可以节省空间,避免不必要的内存分配。
例如:
#define PI 3.14159 //常量宏
const double Pi=3.14159; //此时并未将Pi放入ROM中 ......
6、提高了效率。
编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。
扩展资料:
const 的时候都会混淆它与 define 的区别。从功能上说它们确实很像,但它们又有明显的不同:
1、define是预编译指令,而const是普通变量的定义。define定义的宏是在预处理阶段展开的,而const定义的只读变量是在编译运行阶段使用的。
2、const定义的是变量,而define定义的是常量。define定义的宏在编译后就不存在了,它不占用内存,因为它不是变量,系统只会给变量分配内存。
但const定义的常变量本质上仍然是一个变量,具有变量的基本属性,有类型、占用存储单元。可以说,常变量是有名字的不变量,而常量是没有名字的。
有名字就便于在程序中被引用,所以从使用的角度看,除了不能作为数组的长度,用const定义的常变量具有宏的优点,而且使用更方便。所以编程时在使用const和define都可以的情况下尽量使用常变量来取代宏。
3、const定义的是变量,而宏定义的是常量,所以const定义的对象有数据类型,而宏定义的对象没有数据类型。所以编译器可以对前者进行类型安全检查,而对后者只是机械地进行字符替换,没有类型安全检查。这样就很容易出问题,即“边际问题”或者说是“括号问题”。
参考资料来源:百度百科--const
参考技术AC++在函数声明时,后面跟个const是限定函数类型为常成员函数, 常成员函数是指不能改变成员变量值的函数。
例如“double d() const;”,其中的其中的“const”限定了d()函数中不能有任何改变其所属对象成员变量值的功能,如果有则会在编译阶段就报错。
它的主要作用就是能使成员函数的意义更加清楚,我们可在不改变对象的成员函数的函数原型中加上const说明。在需要增加可读性和减少逻辑出错的情况下,就可以用这种形式。
我们定义的类的成员函数中,常常有一些成员函数不改变类的数据成员,也就是说,这些函数是"只读"函数,而有一些函数要修改类数据成员的值。如果把不改变数据成员的函数都加上const关键字进行标识,显然,可提高程序的可读性。
另外,它还能提高程序的可靠性,已定义成const的成员函数,一旦企图修改数据成员的值,则编译器按错误处理。
扩展资料:
C++中const的其它作用:
1、用于指针的两种情况:const是一个左结合的类型修饰符
int const *A; //A可变,*A不可变
int *const A; //A不可变,*A可变
2、限定函数的传递值参数
void function(const int Var); //传递过来的参数在函数内不可以改变
3、限定函数返回值型
const int function(); //此时const无意义
const myclassname function(); //函数返回自定义类型myclassname
参考资料来源:百度百科-CONST (C++中CONST)
参考技术BC++在函数声明时,后面跟个const是限定函数类型为常成员函数, 常成员函数是指不能改变成员变量值的函数。
例如“double d() const;”,其中的其中的“const”限定了d()函数中不能有任何改变其所属对象成员变量值的功能,如果有则会在编译阶段就报错。
它的主要作用就是能使成员函数的意义更加清楚,我们可在不改变对象的成员函数的函数原型中加上const说明。在需要增加可读性和减少逻辑出错的情况下,就可以用这种形式。
扩展资料:
简单介绍
一、const与define。两者都可以用来定义常量,但是const定义时,定义了常量的类型,所以更精确一些。#define只是简单的文本替换,除了可以定义常量外,还可以用来定义一些简单的函数,有点类似内联函数(Inline)。const和define定义的常量可以放在头文件里面。(小注:可以多次声明,但只能定义一次)
二、》》const与指针和引用。
1、const与指针。
先来看看下面的几种定义:
int me;
const int* p1 = &me;//p1可变,*p1不可变,此时不能用*p1来修改,但是p1可以转向
int* const p2 = &me;//p2不可变,*p2可变,此时允许*p2来修改其值,但是p2不能转向。
const int* const p3 = &me;//p3不可变,*p3也不可变,此时不能用*p3来修改其值。
2、指针和引用的区别很简单,就是引用更简洁,更安全。因为引用声明时必须初始化。 引用更接近const指针,一旦与某个变量关联,就将一直效忠于他。
3、const指针可以接受const和非const地址,但是非const指针只能接受非const地址。所以const指针的能力更强一些,所以尽量多用const指针,这是一种习惯。
参考资料来源:百度百科-CONST (C++中CONST)
参考技术C 非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误),表示成员函数隐含传入的this指针为 const指针,决定了在该成员函数中,任意修改它所在的类的成员的操作都是不允许的(因为隐含了对this指针的const引用);唯一的例外是对于 mutable修饰的成员。加了const的成员函数可以被非const对象和const对象调用,但不加const的成员函数只能被非const对象调 用。例如:class A
private:
int m_a;
public:
A() : m_a(0)
int getA() const return m_a; //同return this->m_a;
int GetA() return m_a;
int setA(int a) const
m_a = a; //这里产生编译错误,如果把前面的成员定义int m_a;改为mutable int m_a;就可以编译通过。
int SetA(int a)
m_a = a; //同this->m_a = a;
;
A a1;
const A a2;
int t;
t = a1.getA();
t = a1.GetA();
t = a2.getA();
t = a2.GetA(); //a2是const对象,调用非const成员函数产生编译错误。 参考技术D
const是一个C语言(ANSI C)的关键字,具有着举足轻重的地位。它限定一个变量不允许被改变,产生静态作用。
使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一定帮助。另外CONST在其它编程语言中也有出现,例如Pascal、C++、PHP5、B#.net、HC08 C、C#等。
const的作用:
1、可以定义const常量,具有不可变性。
2、便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。
3、可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。 同宏定义一样,可以做到不变则已,一变都变!
C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。
C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。
扩展资料:
C++技术应用:
1、科学计算
在科学计算领域,FORTRAN是使用最多的语言之一。但是C++凭借先进的数值计算库、泛型编程等优势在这一领域也应用颇多。
2、网络软件
C++拥有很多成熟的用于网络通信的库,其中最具有代表性的是跨平台的、重量级的ACE库,该库可以说是C++语言最重要的成果之一,在许多重要的企业、部门甚至是军方都有应用。
3、操作系统
在该领域,C语言是主要使用的编程语言。但是C++凭借其对C的兼容性,面向对象性质也开始在该领域有一席之地。
参考资料来源:百度百科-C++
以上是关于c语言问题,这些函数后边跟个const 什么意思 求解的主要内容,如果未能解决你的问题,请参考以下文章
"CONST func(arg);" 是啥意思在C语言中是啥意思?
MySql 用户管理 中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束):