首页
学习
活动
专区
工具
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关键字声明的对象可以初始化,但是不能修改它的值。

2.1K40

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++有一个要求就是如果某个函数出现了引用限定符,则其具有相同参数列表的所有版本都需要有引用限定符

    77630

    【C++从小白到大牛】类和对象

    1、类名就是类型,Stack就是类型,不需要加struct(在C语言中类型还要加上struct) 2、 C语言结构体只能定义变量,在C++,结构体内不仅可以定义变量,也可以定义函数。...静态成员变量一定要在类外进行初始化!类里面声明,类外面定义 原因: 类里面初始化的缺省值,本质上是给初始化列表的,但是静态成员变量不要走初始化列表,因为初始化列表要定义一个对象里的成员。...答:可以 九、对于隐式类型转换的那些事儿 首先分为两大类: 第一类是内置类型的隐式类型转换,主要就是整形和浮点型之间的转换。 注意这里引用需要加上const,但赋值不需要加。...因为隐式类型转换中间会产生临时变量,而临时变量具有常性!这里的引用是将临时变量引用给了r,具有常性,所以要加上const;而赋值是将临时变量直接赋值给d,不需要加上const!...注意这里的引用需要加上const原理与上面一样,因为隐式类型转换会生成临时变量,而临时变量会具有常性。 如果是多参数,可以选择用大括号 { } 进行表示!

    7810

    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不同的是:

    89030

    C++的提供的四种类型转换方式;

    4、初始化类型转换 初始化对象时的类型转换:在初始化一个变量或对象时,如果初始化值的类型与被初始化对象的类型不同,但存在合适的隐式转换关系,则会进行转换。...向下转型(基类到派生类) 转换规则:当进行向下转型时,dynamic_cast会在运行时检查被转换对象的实际类型。只有当基类指针或引用实际指向的是目标派生类类型(或其派生类)的对象时,转换才会成功。...用于多态类型的检查: 如果dynamic_cast的目标类型指针类型,并且转换失败,它会返回nullptr;如果目标类型是引用类型,并且转换失败,它会抛出std::bad_cast异常。...对于非多态类型(没有虚函数的类),不能使用dynamic_cast。 3. const_cast const_cast用于去除或添加const或volatile限定符。...10; } 注意事项: 使用const_cast去除const限定符并修改const对象的值是一种危险的操作,可能会导致未定义行为,尤其是当这个const对象在其他地方被期望保持不变时。

    6610

    getline函数(精华版)

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

    1.6K40

    【C++阅览室】类和对象

    访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止 4. 如果后面没有访问限定符,作用域就到 } 即类结束。...类的实例化 用类类型创建对象的过程,称为类的实例化 .this指针 C++通过引入this指针解决该问题,即:C++编译器给每个“非静态的成员函数“增加了一个隐藏 的指针参数,让该指针指向当前对象...特性: 1. this指针类型:类类型* const,即成员函数,不能给this指针赋值。 2....关于编译器生成的默认成员函数初始化,只有内置类型(基本类型)才有可能会被初始化(有些编译器也不会初始化),而自定义类型建议自己添加缺省值,以免自动被初始化成随机值。...成员 将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数 隐含的this指针,表明在该成员函数不能对类的任何成员进行修改。

    5010

    【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)

    例如: void fun() const { } const修饰成员函数的本质是修饰this指针指向的内容,它的作用是防止该函数内部对成员变量的值进行修改。...一下三种变量必须在初始化列表中进行初始化,否则会编译报错:引用类型的成员变量、const成员变量、不存在默认构造的类类型成员变量。...; }; 可以看到,对于const成员“_c”,我们并没有显示在初始化列表对其进行初始化,而是在其声明时为其赋了一个缺省值(初值)。...特殊情况:对于有const修饰的整形静态成员变量,可以在类同时进行声明和初始化。...友元函数可以在类的任意地方声明,并不受public等限定符的限制。 3. 一个函数可以称为多个类的友元。 4. 友元类的成员函数都可以访问宿主类的成员,不受限定符限制。 5.

    10410

    C++之类和对象

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

    1.2K00

    C++类和对象 - 下【匿名对象,友元,static成员】

    引⽤成员变量,const成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进⾏初始化,否则会编译报错。...对于没有显⽰在初始化列表初始化的⾃定义类型成员会调⽤这个成员类型的默认构造函数,如果没有默认构造会编译错误。 初始化列表按照成员变量在类声明顺序进⾏初始化,跟成员在初始化列表出现的的先后顺序⽆关。...静态成员变量为所有类对象所共享,不属于某个具体的对象,不存在对象,存放在静态区。 ⽤static修饰的成员函数,称之为静态成员函数,静态成员函数没有this指针。...静态成员函数可以访问其他的静态成员,但是不能访问⾮静态的,因为没有this指针。 ⾮静态的成员函数,可以访问任意的静态成员变量和静态成员函数。...静态成员函数可以访问其他的静态成员,但是不能访问⾮静态的,因为没有this指针。 ⾮静态的成员函数,可以访问任意的静态成员变量和静态成员函数。

    7910

    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*。

    81710

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

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

    72730

    技术◈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吧。

    75730

    第 13 章 拷贝控制

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

    1K50

    c++ primer2 变量和基本类型

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

    53510

    C++类和对象(下)

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

    15720

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

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

    9010
    领券