首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

初始化将从指针目标类型中丢弃“const”限定符

初始化将从指针目标类型中丢弃"const"限定符是指在初始化指针时,如果目标类型中有"const"限定符,那么在初始化过程中会将其丢弃。

"const"限定符用于声明一个常量,表示该变量的值不能被修改。而指针是用来存储变量的内存地址的变量,它可以指向任意类型的数据。当一个指针被声明为指向一个带有"const"限定符的类型时,它意味着该指针指向的数据是不可修改的。

然而,在初始化指针时,如果将一个带有"const"限定符的类型赋值给一个不带"const"限定符的指针,编译器会丢弃"const"限定符,这意味着通过这个指针仍然可以修改目标数据的值。

这种情况下,需要注意的是,虽然指针本身不带有"const"限定符,但是如果通过这个指针去修改目标数据的值,就会触发未定义行为,因为目标数据本身是带有"const"限定符的。

以下是一个示例代码,用于说明这个概念:

代码语言:txt
复制
const int num = 10; // 声明一个带有"const"限定符的整数常量
int* ptr = # // 初始化一个指针,将常量的地址赋值给指针

// 尝试修改目标数据的值
*ptr = 20; // 这里会触发未定义行为,因为目标数据是带有"const"限定符的

在这个例子中,尽管指针ptr本身不带有"const"限定符,但是通过它去修改num的值会导致未定义行为。

总结起来,初始化将从指针目标类型中丢弃"const"限定符意味着在初始化指针时,如果目标类型带有"const"限定符,那么在初始化过程中会忽略这个限定符,导致通过指针仍然可以修改目标数据的值。但是需要注意,这样做会触发未定义行为,因为目标数据本身是不可修改的。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

《C Primer》笔记(上篇)

3.const限定符 用于限定一个变量为只读,改变量的值在整个程序不可更改 const限定符用起来比#define更灵活,后续讨论。...例如目标类型是8位的unsigned char,待赋的值是原始值求模256 如果目标类型是一个有符号整形,且待赋的值时整数,结果因实现而异 目标类型是一个整形,且待赋的值是浮点数时,该行为是未定义的 3...==如果把一个字符串字面量拷贝给一个数组,就可以随意改变数据,除非把数组声明为const。 总结: 初始化数组把静态存储区的字符串拷贝到数组,而初始化指针只把字符串的地址拷贝给指针。...()如果读取到换行符,会丢弃掉而不是存储它 gets_s()读到最大字符数都没有读到换行符,会执行以下几步:首先把目标数组的首字符设置成空字符,读取并丢弃随后的输入直至读到换行符或文件结尾,然后返回空指针...== ANSIC 类型限定符 1.const类型限定符 const关键字声明的对象可以初始化,但是不能修改它的值。

1.9K40

GLSL-变量和类型

mat3 3*3的float的矩阵 mat4 4*4的float的矩阵 sampler2D 操作2D的Texture的句柄 samplerCube 操作cube的Texture的句柄 另外,GLSL不支持指针类型...函数返回值和结构体内的变量不适用限定符。 成员变量没有标明限定符,或者标了const的,必须在声明的时候初始化。uniform、attribute、varying这三个不受此限制。...const 限定符 const限定符标识一个只读常量,在声明的时候就必须初始化。...attribute 限定符 attribute是用来给Vertex Shader传递顶点数据的,只能用在Vertex Shader。一般通过OpenGL API来初始化。...限定符 作用 和 in 完全一样 in 传给函数,在函数读取值 out 传给函数,在函数写入值;传给函数的时候没有初始化 inout in 和 out 作用的结合

2K40

【笔记】《C++Primer》—— 第13章:拷贝控制

成员依次拷贝到正在创建的对象,其中内置类型会直接拷贝,数组会被逐元素地拷贝,类类型会调用拷贝构造函数来拷贝 拷贝初始化在我们认为发生了拷贝时会进行,例如等号赋值,对象作为实参传递,对象非引用返回,花括号初始化...如果初始化值要求一个explicit构造函数来类型转换,则拷贝初始化还是直接初始化就无关紧要了 重载运算符本质是函数,格式为operator符号,参数和返回值可自定义,其中常见的赋值运算符(即等号)通常参数一个右类型引用...,改变副本不会产生影响,通常操作是在构造函数要先拷贝右侧的对象的成员到新副本,然后释放副本的指针部分,接着把右侧的指针部分赋值到左侧,最后返回本副本。...FOO(FOO&& inp) noexcept :p(inp.p) { // 移动构造的一般形式 // 先声明不会抛出异常 // 然后在初始化部分复制传入的右值引用的指针...&; FOO test_right()const&&; 由于有了不同的限定符,可以想到引用限定符也可以用来区分重载的办吧,这里C++有一个要求就是如果某个函数出现了引用限定符,则其具有相同参数列表的所有版本都需要有引用限定符

75630

C++:33---类成员指针

成员 const string Screen::*pdata; 为指针赋值: //将pdata指向于Screen类的contents成员pdata = &Screen::contents; 也可以在定义数据成员指针时直接初始化...: 指向成员函数的指针也需要指定目标函数的返回类型和形参列表 如果成员函数时const的或者是引用成员,则我们必须将const限定符或引用限定符包含进来 成员函数指针的定义 最简单的方法就是使用auto...来声明一个指向于成员函数的指针 //pmf是一个函数指针,指向于get_cursor函数auto pmf = &Screen::get_cursor; 因为定义成员函数指针时,需要同时指定目标函数的返回值类型和形参列表...因为其是一个普通函数,所以不能使用const限定符 //错误的语法,非成员函数p不能使用const限定符char Screen::*pmf2(Screen::pos, Screen::pos)const...我们也可以采取另一种方法,就是使用标准库功能mem_fn来让编译器负责推断成员的类型 mem_fn也定义在functional头文件,并且可以从成员指针生成一个可调用对象 和function不同的是:

85830

getline函数(精华版)

而且读取的方 式有很多,包括根据限定符,根据已读取的字符的个数。从这个函数的名称来看,它的直观 意义是从流读取一行,但是大家不要被这表面的现象所迷惑。...string类型,因为C++编译器无法执行此默认转换。...如果是碰到了限定符,那么该字符便会被  extracted and discarded,也就是文件指针向下再移一位,但是并不保存该字符,也就 是每次getline之后,文件指针会停留在限定符的后面(遇到限定符的情况...但回车符本身并没有拷贝到缓冲区,            这样下次的读操作将从回车符后面的第一个字符开始,            */             break;          }/* 注...由于是传引用,所以不论调用哪个,都会改变原文件流get的指针所指向的位置。

1.5K40

C++之类和对象

文章目录 面向对象和面向过程的初步认识 类的引入 类的定义 类的访问限定符及封装 访问限定符 封装 类的作用域 类的实例化 类对象模型 计算类的大小 类对象的存储方式 this指针 this指针的特性...取地址重载 const成员函数 取地址重载 const取地址重载 初始化列表 基础知识 特性 隐式类型转换 基础知识 构造函数的隐式类型转换 explicit 关键字 类型转换的意义 static...因为类的成员函数第一个参数是隐藏的this指针,而日期类this指针的完整类型是:Date const*this,这个const修饰的是this指针本身,也就是说this指针指向的值是可以修改的。...: 可以看到对于内置类型_a当我不在初始化列表初始化它,编译器就会用一个随机值来初始化,而我不在初始化列表初始化,编译器就会自己去找自定义类型自己的默认构造函数,当自定义类型既没有在初始化列表显示定义又没有默认构造函数时就会报错...**前面说了构造函数只是赋值并不是初始化,真正的初始化只有在初始化列表,所以引用成员变量和const成员变量都必须显示的写在初始化列表

1.1K00

C++ 深入理解const_cast转换运算符

const_cast转换运算符我们在RTTI和类型转换运算符详细介绍过它的用法和使用场景,今天我们对其进一步了解一下。首先我们回忆一下它的作用和用法。...这里我们需要强调的是 const_cast主要用于更改指针或引用的const或volatile限定符。其中,type_name必须是指针、引用或者成员指针类型。...在调用第三方函数的使用 const_cast另外一种使用场景就是:在使用第三方库或API时,它们只提供了非const类型的参数的函数,但我们只有const类型的对象。如示例2所示。...,来保证函数的正常调用,但是需要保证*ptr指向的对象在初始化的时候是非const的。...例如在下面的示例3,通过const_cast将b1的类型由volatile int*转换为 int*。

71110

【C++】类和对象核心总结

C++我们实现封装其实就是通过类和访问限定符,将对象的内部实现细节隐藏起来,通过访问限定符将某些接口放开在类外部进行使用。...将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数 隐含的this指针,表明在该成员函数不能对类的任何成员进行修改。...每个成员变量在初始化列表只能出现一次(初始化只能初始化一次) c....当类的成员变量出现const修饰、引用成员变量,或自定义类型的类没有合适的默认构造的时候必须要在初始化列表的位置进行初始化,不可以通过构造函数对成员变量进行赋初值。...成员变量在类声明次序就是其在初始化列表初始化顺序,与其在初始化列表的先后次序无关 所以下面代码会先初始化_a2再初始化_a1,那么输出的_a1就应该是1,_a2就应该是随机值。

70930

技术◈C++核心知识总结(I)

作为第一篇文章,当然将一些比较基础的概念,以下(高手略过): (1)自动类型推导 auto & decltype() (2)常量限定符 const & constexpr (3) 空指针 null...常量限定符const与 constexpr 讲完了自动类型推导,接下来说一下C++与常量定义相关的两个关键词 const 和 constexpr。...类型的地址,这里只需要保证指针指向的值不变即可,至于ptr存的值(地址)是可以改变的,也就是说这里的const限定了指针指向的内存存的值,即上面pi不可改变。...既然叫常量指针const限定的是指针本身,这就意味着指针的值不可改变,举个例子: double pi = 3.14; double * const ptr = π ptr的值在其生命周期中永远指向...所以C++11标准推荐我们使用nullptr,这个关键字本身就是代表空指针,更加合适,所以下次如果你们在C++初始化一个指针变量时,就用名副其实的nullptr吧。

74730

第 13 章 拷贝控制

直接初始化时,实际上是编译器使用普通的函数匹配来选择与我们提供的参数最匹配的构造函数。而拷贝初始化是将右侧运算对象拷贝到正在创建的对象,需要的话还会进行类型转换。...而在一个析构函数,首先执行函数体,然后销毁成员。成员按初始化顺序的逆序销毁。 销毁类类型成员时需要执行成员自己的析构函数,内置类型没有析构函数,因此销毁内置类型成员什么也不需要做。...引用限定符必须同时出现在函数的声明和定义。...引用限定符必须跟随在 const的后面。...class Foo { public: Foo sorted() &&; Foo sorted() const; // 错误,必须加上引用限定符 // 定义函数类型类型别名

97950

C++の自动类型推导和其他

这篇文章主要讲以下三个话题: (1)自动类型推导 auto & decltype() (2)常量限定符 const & constexpr (3) 空指针 null 与 nullptr 这一篇文章很基础...常量限定符const与 constexpr 讲完了自动类型推导,接下来说一下C++与常量定义相关的两个关键词 const 和 constexpr。...类型的地址,这里只需要保证指针指向的值不变即可,至于ptr存的值(地址)是可以改变的,也就是说这里的const限定了指针指向的内存存的值,即上面pi不可改变。...既然叫常量指针const限定的是指针本身,这就意味着指针的值不可改变,举个例子: double pi = 3.14; double * const ptr = π ptr的值在其生命周期中永远指向...所以C++11标准推荐我们使用nullptr,这个关键字本身就是代表空指针,更加合适,所以下次如果你们在C++初始化一个指针变量时,就用名副其实的nullptr吧。

64810

c++ primer2 变量和基本类型

c++11用花括号来初始化变量得到了全面应用。 默认初始化。 定义变量的时候没有指定初始值的话,则就会被默认初始化,这个初始化的值由变量类型决定,另外变量定义的位置也会对变量的初始化值有影响。...空指针不指向任何对象,一个好的习惯是在使用一个指针之前检查一下其是否为空,c++11允许使用nullptr来初始化一个指针为空。也可以使用NULL,在新的c++程序应该避免这样使用。...void 指针:可用于存放任意对象的地址,但是我们对该地址存着什么类型的对象并不清楚。 cosnt 限定符。...(函数体内的变量一般并非存放在固定地址,所以constexpr指针不能指向这样的变量,也就是说,定义于任何函数体之外的对象其地址是固定不变的,所以可以用来初始化constexpr指针)。...必须声明:constexpr声明如果定义了一个指针,那么限定符仅对指针有效,与指针所指的对象无关。

52010

C++类和对象(下)

初始化列表初始化顺序取决类的声明顺序 以下几种类型必须使用初始化列表进行初始化 const 修饰 引用 类型 自定义类型,且该自定义类型没有默认构造函数 建议 优先选择使用初始化列表 列表的顺序与声明时的顺序保持一致...int main() { A aa1 = 100; //注:此时整型 100 能赋给自定义类型 return 0; } 合法原因: 类只有一个整型成员 赋值时,会先生成同类型临时变量,即调用一次构造函数...,定义时不添加static关键字,类只是声明 类静态成员可用 类名::静态成员 或者 对象.静态成员 来访问 静态成员函数没有隐藏的 this 指针,不能访问任何 非静态成员 静态成员也是类的成员,受...public 、protected 、private 访问限定符的限制 课代表简单总结: 静态成员变量必须在类外初始化(定义) 静态成员函数 失去了 this 指针,但当为 public 时,可以通过...注意: 内部类跟其外类是独立存在的,计算外类大小时,是不包括内部类大小的 内部类受访问限定符的限定,假设为私有,内部类无法被直接使用 内部类天生就算外类的友元,即可以访问外类的成员,而外类无法访问内部类

14220

C++心决之类和对象详解(下篇)(封装进阶篇)

,但是不能将其称为对对象成员变量的初始化, 构造函数体的语句只能将其称为赋初值 ,而不能称作初始化。...类包含以下成员,必须放在初始化列表位置进行初始化: 引用成员变量 const成员变量 自定义类型成员(且该类没有默认构造函数时) class A { public: A(int a) :_...尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化。...成员变量 在类 声明次序 就是其在初始化列表初始化顺序 ,与其在初始化列表的先后次序无关 1.3 explicit关键字 构造函数不仅可以构造与初始化对象, 对于接收单个参数的构造函数,...修饰(友元函数并不是类的成员函数,类的成员函数中有this指针,this指针才需要被const修饰)(非成员函数不允许使用类型限定符) 友元函数可以在类定义的任何地方声明,不受类访问限定符限制 一个函数可以是多个类的友元函数

8210

【C++】———— 继承

基类的private成员在派生类是不能被访问,如果基类成员不想再类外直接被访问,但需要在派生类中被访问,就用protected定义。可以看出保护成员限定符可能是由于继承才出现的。...int a = 10; char b = a;//隐式类型转换 char& c = a;//报错 const char& c = a;//正确 double& d = a;//报错 const double...因为引用必须绑定到与其类型完全匹配的对象上,否则就会引起权限的放大,因为产生的临时对象具有常性,常性是一种编程的约束和特性,所以不能将 int 类型的变量直接绑定到 char 引用或 double 引用...寓意把派生类父类那部分切来赋值过去。 基类对象不能赋值给派生类对象。 基类的指针或者引用可以通过强制类型转换赋值给派生类的指针或者引用。但是必须是基类的指针是指向派生类对象时才是安全的。...) error , Person(name)//正确初始化 { cout << "Student()" << endl; } ~Student() { //因为构成覆盖关系,所以指定域作用限定符

6610

const修饰的双重指针赋值解惑

原来还是const修订符搞的怪: 第一段代码: cp是一个指向char类型指针。...ccp是一个const修饰符修饰的指向char类型指针,也就是说,它指向的是char类型,但是指针本身是不可修改的。...在ANSI C标准,有这么一段: 两个操作数都是指向有限定符或无限定符的相容类型指针,左边的指针所指向的类型必须具有右边的全部限定符。...也就是说: ccp是一个指向有const修饰符的指针,cp是一个指向没有const修饰符的指针。ccp包含了cp的所有修饰符(其实cp就没啥修饰符),因此可以进行赋值。...这样,我们看一下面的代码: c是一个指向char类型指针指针。 cc是一个指向const修饰符修饰的char类型指针指针。 cc 与 c指向的内容并不相同,因此无法进行赋值操作。

97790

const 详解

一、const变量         1、限定符声明变量只能被读    const int i=5;    int j=0;    ……    i=j;  //非法,导致编译错误    j=i...;  //合法    2、 必须初始化    const int i=5;    //合法    const int j;      //非法,导致编译错误    3、在另一连接文件引用const...6、可以通过函数对常量进行初始化    int value();    const int i=value();    dapingguo说:假定对ROM编写程序时,由于目标代码的不可改写,本语句将会无效...=&i;        //指针p1i所指内容是常量,可以不初始化    int  * const p2i=&ii;    //指针p2i是常量,所指内容可修改    const int * const...所以很多C++程序设计书籍建议:"Use const whenever you need"。 二、const成员函数     任何不会修改数据成员的函数都应该声明为const类型

98910

const的定义和使用解析

const是一个关键字,用于限制变量、函数参数、函数返回值等的值不能被修改 1.变量的const限定符: 在变量定义时使用const限定符,表示该变量的值是常量,不可修改。...例如:const int a = 10; 2.函数参数的const限定符: 在函数的参数列表,对某个参数使用const限定符,表示该参数是只读的,函数内部不可以修改该参数的值。...例如:void func(const int a); 3.函数返回值的const限定符: 在函数声明时,在函数返回类型前面添加const关键字,表示返回值是常量,不可被修改。...例如:const int func();4.const成员函数: 4.函数声明为const:    当一个函数被声明为const时,表示该函数不会修改任何类成员的状态。这通常用于类的成员函数。...value; }; 在上面的例子,getValue函数被声明为const,表示该函数不会修改MyClass类的任何成员变量的值。

7110
领券