【c++ 基础知识 0001 const 知识】教程文章相关的互联网学习教程文章

C++ 指针 const 数组 引用

指针和const 禁止改写指针(常量指针或常指针) int x=0; int * const pInt = &x; 存放地址的变量pInt不可变,但pInt可指向其他变量,x的值可变。 禁止改写间接引用 int x=5; const int *pInt=&x; pInt中存放的地址可以变,但x的值不可变。 既禁止改写指针,又禁止改写间接引用 int x=5; const int * const pInt = &x; 指针和数组 在C++中数组和指针的关系十分密切,两者的内部处理方式几乎相同。访问数组中的元素有下标和指针两种形...

C++ non-const lvalue reference cannot bind to a temporary【图】

1. 问题代码 #include <iostream> #include <vector>//注意begin和end形参都声明为引用 bool find_int(std::vector<int>::iterator &begin, std::vector<int>::iterator &end, int v){while(begin != end){if(*begin == v)return true;begin++;}return false; }int main(){std::vector<int> a(3, 100);//a.begin()和a.end()的返回值作为实参传入find_int中std::cout << find_int(a.begin(), a.end(), 100) << std::endl; } 2. 编译...

C++ const 和 constexpr的区别【代码】【图】

const只是声明变量类型/函数返回类型为常量,不能改动。 constexpr修饰变量/函数是显式告知编译器“我是常量,不要在多费功夫了,直接把我替换为常量加入汇编代码!”。 比如下面这样的函数或者变量都是这种情况:1 constexpr int x=1; 2 int constexpr f(){ 3 return 1; 4 }C++11中的constexpr指定的函数返回值和参数必须要保证是字面值,而且必须有且只有一行return代码,这给函数的设计者带来了更多的限制,比如通常只能通...

[传智播客]C++基础视频(深入浅出版)C语言提高-const专题【代码】

const是定义常量==》const意味着只读 int main() { const int a; int const b; //第一个第二个意思一样 代表一个常整形数const char *c; //c是一个指向常整形数的指针(所指向的内存数据不能被修改,但是本身可以修改 char * const d; char buf[100];//d 常指针(指针变量不能被修改,但是它所指向内存空间可以被修改) const char * const e ;//e一个指向常整形的常指针(指针和它所指向的内存空间,均不能被修改return 0; }正...

C++学习——“const”关键字的用法【代码】

" const "关键字的用法 中国大学慕课:https://www.icourse163.org/learn/PKU-1002029030?tid=1450432459#/learn/content?type=detail&id=1214925544&cid=1219120292&replay=true 定义常量: const int MAX_VAL = 23; const double Pi = 3.14; const char * SCHOOL_NAME = "Peking University";用法与 define 类似,C++中的const 定义常量时有类型,便于类型检查。定义常量指针:不可通过常量指针修改其指向的内容int n,m; const ...

c++ const关键字【代码】

//指针和const int* const p;//p本身是个常量 const int* p;//p指向的变量类型是const int//函数和const class Test{ public:void fun(Test&) const;/*成员函数不可改变成员变量的值,只读不写*/ } const int f(){//pass//返回常量基本类型 }//普通变量和const const double Pi = 3.14;//定义全局变量 /*const 在c++中比define更常用*/ class Test{ public:const int test = 60;/*成员常数和普通常数都要先初始化*/ }//const和引用...

Effective C++条款02:尽量以const,enum,inline替换#define

一、为什么不推荐使用#define 在程序中你肯能会定义下面一个宏,来表示一个数值#define ASOECT_RATIO 1.653#define的缺点 ①宏的名称是不会被编译器看见的,因为在程序的预处理阶段,宏会被替换为其对应的数值/表达式,因此宏对于编译器来说是不存在“名称”这一概念的。 ②因为宏没有名称这一概念,因此宏的名称是不会进入符号表中(symbol table),宏在符号表中只是其对应的数值/表达式。于是当你调试时(例如使用gdb或其他调试...

看 C++ Primer 的58页, 讲拷贝时不能忽略 底层const这里的说的原因有点牵强, 这里给出自己的理解

extern const int ci =42; const int * p2 = &ci; extern const int *const p3= p2;   int *p= p3;      //错,p没有底层const。 书上的解释是: p3是顶层const 也是底层const,拷贝p3可以不在乎其顶层const, 但是p3指向的是一个常量,因此不能用P3初始化p, 而p 只能指向非常量。 理解他说的意思是因为一个指向常量一个指向非常量。 但自己仔细想想, 底层const也可以指向一个非常量, 那是不是当p3一开始就用非...

c++(4)----指针和引用、const【代码】

指针和引用都是一种复合类型。 复合类型: 基于其他类型定义的类型 基本数据类型+声明符 引用并非对象,而是一个别名,定义时必须初始化// 引用并非对象,而是一个别名 int ival =1024; int &refVal = ival; // refVal 指向ival(是ival的另一个名称) int &refVal2; //报错:引用必须被初始化int i =1024, i2=2048; int &r=i, r2=i2; //r是一个引用;r2 是 int int &r3 = i3, &r4 =i2; // r3和r4都是引用指...

C++中强制变换之const_cast的疑惑【代码】【图】

看下面一段代码: 情形一 #include <iostream> int main() {int i = 3;const int& cref_i = i;const_cast<int&>(cref_i) = 4; // OK: modifies istd::cout << "i = " << i << " cref_i = " << cref_i << std::endl;std::cout << "i address: " << &i << " cref_i address: " << &cref_i << std::endl;getchar();return 0; }运行结果:再看这一段代码: 情形二 #include <iostream> int main() {const int i = 3;const int& cref_i...

C++ const member function【代码】

C++ const member functionconst member function參考連結 const member function 在函數定義後面加上const就成了const member function,它的作用是確保在函數裡面不會有成員變數被意外地修改。在const member function內,如果嘗試去修改任一成員變數,都會造成編譯錯誤。 另外注意:一個const object只能調用const member function; 一般的物件則可以調用一般的成員函數或是const member function。 在TensorRT/samples/common...

【C++】VS2017 不能将const char * 分配给 char *【代码】

我的方式是把结构体中定义的 char * 换成string#include <iostream> #include<string> using namespace std;class Student { public:void setname(string name);void setage(int age);void setscore(float score);void show(); private:string name;int age;float score; };void Student::setname(string name) {this->name = name; } void Student::setage(int age) {this->age = age; } void Student::setscore(float score) {th...

c++-const

constconst基础知识(指针变量和它所指向的内存空间变量是两个不同的概念) c中冒牌货(只读变量有自己存储空间) C++const是一个只读常量,符号表机制,(不)可能分配内存 const常量是由编译器处理的,提供类型检查和作用域检查 define宏定义由预处理器处理,单纯的文本替换 const修饰类成员变量(构造函数初始化列表) const修饰类成员函数:修饰的是this指针基础知识(指针变量和它所指向的内存空间变量是两个不同的概念)cons...

c++--开始和引用和const和指针

命名空间 #include <iostream> using namespace std; iostream 提供一个叫命名空间的东西, 标准的命名空间是 std #include <iostream>//方式二: #if 0 using std::cout; //声明命名空间中的一个变量 using std::endl; using std::cin; #endif//方式三 using namespace std;int main(void) {int a = 0; #if 0//方式一:std::cout << "nihao shijie" << std::endl;std::cout << "nihuai shijie" << std::endl; #endifcout << "nihu...

C++的顶层const 和 底层const

顶层const:表示指针本身为常量。 底层const:表示指针所指向的对象为一个常量。 且指针类型即可以是顶层const 也可以是 底层const int i = 0; int const* p1 = &i; // p1不能被改变,其为顶层const int const p2 = 4; // p2不能被改变,为顶层const int cosnt *p3 = &p2 // p3能被改变,为底层const const int *const p4 = p3; // 第一个const为底层cosnt 第二个const为顶层const ,此处p4即是顶层const也是底层const...

CONST - 相关标签