C语言和C++中const的不同之处

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40818798/article/details/86615487

C语言中的const 

#include<stdio.h>
int main()
{
	int const a = 8;
	int *p = &a;	//warning C4090: “初始化”: 不同的“const”限定符
	//a = 10; //直接修改会提示错误error C2166: 左值指定 const 对象
	*p = 100;	//但间接修改可行
	printf("a=%d", a);
	return 0;
}
  • 上述代码在.c文件下,编译时
  • 警告:warning C4090: “初始化”: 不同的“const”限定符
  • 第6行错误:error C2166: 左值指定 const 对象   
  • 第6行注释掉后:========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
  • 【结论】.c文件中const不可直接修改,可间接修改

C++中的const

#include<stdio.h>
int main()
{
	int const a = 8;
	int *p = &a;	//error C2440: “初始化”: 无法从“const int *”转换为“int *”
	a = 10; //error C3892: “a”: 不能给常量赋值
	*p = 100;	
	printf("a=%d", a);
	return 0;
}
  • 同样的代码,将文件后缀名由.c改为.cpp
  • 第5行错误:error C2440: “初始化”: 无法从“const int *”转换为“int *”              note: 转换丢失限定符
  • 第6行错误:error C3892: “a”: 不能给常量赋值
  • ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
  • 无法生成可执行文件。C++比C对const的要求更加严格

const常见用法举例

#include <iostream>
using namespace std;
#define X 3 //宏定义,编译时计算机不检查语法错误
int main()
{
//    int const a=3;  //const int a=3;
//    const int *p=&a;//int const *p=&a;     p可变,*p内容不可变
    int const b=5;
//    int *const q =&b;//q不可变,*q内容可变
//    const int *const q =&b;//q不可变,*q不可变
    int const *p = &b;
//    int const &c=b;   //c不可被赋值,b可被赋值
//    c=1;
//    b=3;
//    a=5;
//    *q=4;
//    p=&b;
//    cout << a << c << *p << endl;
    return 0;
}
  • 1) const在前面 
const int nValue; //nValue是const 
const char *pContent; //*pContent是const, pContent可变 
const (char *) pContent; //pContent是const,*pContent可变 
char* const pContent; //pContent是const,*pContent可变 
const char* const pContent; //pContent和*pContent都是const 
  • 2) const在后面,与上面的声明对等 
int const nValue; // nValue是const 
char const * pContent;// *pContent是const, pContent可变 
(char *) const pContent;//pContent是const, *pContent可变 
char* const pContent;// pContent是const, *pContent可变 
char const* const pContent;// pContent和*pContent都是const 
  • 看懂const :看const后紧跟的是什么?如果是指针变量,则指针变量不允许修改;如果是指针变量所指向的值,则值不允许修改

猜你喜欢

转载自blog.csdn.net/qq_40818798/article/details/86615487