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

C++14和C++17使用:`*p++ = *p`的区别

C++14和C++17中*p++ = *p的区别如下:

在C++14中,*p++ = *p的含义是将指针p所指向的值赋给p指向的下一个位置,并将p指向下一个位置。这个表达式的行为是未定义的,因为它会导致指针p在同一表达式中既被修改又被使用,这违反了C++语言的规则。

在C++17中,*p++ = *p的含义是将指针p所指向的值赋给p指向的下一个位置,并将p指向下一个位置。这个表达式的行为是定义良好的,因为C++17中引入了指针迭代器的临时对象,它会在表达式结束后才递增指针p。这样,*p++ = *p的操作可以正确执行。

总结:

  • 在C++14中,*p++ = *p的行为是未定义的,不应该使用。
  • 在C++17中,*p++ = *p的行为是定义良好的,可以正确执行。

请注意,以上答案仅适用于C++14和C++17中*p++ = *p的区别。如果您对其他C++相关问题有任何疑问,欢迎继续提问。

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

相关·内容

指针 *p++ 与 (*p)++ 的区别

指针 C语言的指针(pointer),是内存中存储单元的存储地址,指针变量就是专门用来存储其他变量的地址的变量。 用指针要小心,搞不好会死机。...&是地址运算符,用来表示变量的地址,*是类型说明符,用来说明其后的变量是个指针,如果*在表达式中出现,那么就表示该指针变量所指向的变量。 上代码 int a,*p; p=&a; 那么*p就是a了。...那么*p++与(*p)++和a++有什么关系? 根据括号运算符的最高优先级,我们可以肯定,(*p)++和a++应该是等价的。 那*p++呢,*p++相当于*(p++),即*p,p++。...int a[2],*p; p=&a; 那么*p就是a[0],(*p)++就是a[0]++,*(p++)就是a[0],然后p++。 因为数组的指针就是数组在内存中的起始地址,而且数组是连续存储的....事实上,a[0]也可以写成p[0]。

16020
  • C++中auto关键字的用法详解

    2.auto使用细则 auto与指针和引用结合起来使用 用auto声明指针类型时,用auto和auto*没有任何区别,但用auto声明引用类型时则必须 加& int main() { int x...return 0; } 所以auto无疑是十分不错的选择 5、auto在C++14和C++17的更新 C++的auto关键字最初在C++11中引入,主要用于自动类型推导,使编程更简洁。...在后续的C++14和C++17标准中,对auto的使用进行了一些扩展和更新,进一步提高了其灵活性和功能性。...在实例化时,N的类型会根据提供的常量自动推导。 结构化绑定: C++17还引入了结构化绑定,这允许使用auto来解构数组、结构体和tuple,从而更容易地访问复合数据类型的元素。...示例: std::pair p = {1, 2.3}; auto [x, y] = p; // x是int, y是double 这些更新让auto在C++中的应用更加广泛和灵活

    38610

    Modern C++,学炸了!!

    stl 库,它们包括但不限于: 指针和引用的概念 指针与内存关系 程序编译过程,静态链接库和动态链接库 static、const、#define的用法和区别 C和C++区别 内存中的栈和堆分配 C++...C++17 就 C++14 的这种改变,对旧的代码不会产生任何影响,但可以让后来的开发更加灵活。...各种技巧和避坑指南的书《Effective Modern C++》,这本书也不错,推荐一下: 五、常用编译器对 C++11/14/17 的支持情况 我目前公司的项目也全部使用 C++17 开发,对于...特性,VS 2017 完美支持 C++14 和部分 C++17 特性,VS 2019 完美支持 C++17 大多数语言特性。...网络库 uWebSocket 是一款开源的 WebSocket 库,最新版使用了大量 C++17 的语法,美中不足的是这个库代码存在不少 bug,我在项目中使用了它,但修改了其大量的 bug,有兴趣的朋友也可以下载下来看一下

    3.3K10

    句柄数lsof 和 lsof -p pid的区别

    lsof -p pid获取的是当前pid进程文件句柄数 image.png 通过 lsof 查看当前pid线程句柄数 lsof -n|awk '{print $2}'|sort|uniq -c |sort...-nr|more image.png 相差很大,再分析lsof其他字段,最终发现问题所在,tid字段,线程字段,通过线程重新统计发现: 统计3370 pid下所有tid线程出现的次数发现: lsof...3370.log 第一列是出现次数,第二列是线程id image.png 每个线程出现次数几乎一模一样,导致这个结果是因为进程持有资源,线程基本不持有资源,共享进程所持有的资源,导致lsof获取到的句柄数特别大...,其实线程是使用了共享资源导致,下图是线程共享与独享示例: 线程共享 线程独享 地址空间 程序计数器 全局变量 寄存器 打开的文件 栈 子进程 状态字 闹钟 信号及信号服务成勋 记账信息

    4K50

    C++17常用新特性(六)---lambda表达式的扩展

    从C++11起就引入了lambda表达式,C++14又对其进行了丰富,开始支持使用泛型lambda。到现在的C++17 lambda的功能又进行了扩展。...在C++17新特性中,主要支持了以下两种场景: 在常量表达式中使用 需要对当前对象的拷贝时使用,如不同的线程需要创建不同的对象。...1 constexpr lambda表达式 从C++17开始,lambda表达式会尽可能的隐式声明constexpr,在任何只使用有效的编译期上下文的lambda都有可能被用于编译期。...2 constexpr lambda的使用 下面的例子主要演示了在lambda中使用constexpr,代码分别在编译期和运行期调用lambda的场景,代码如下: auto hash = [](const...但是最终被接受的正式谈是由Faisal Vali、Jens Maurer、 Richard Smith 发表于https://wg21.link/p0170r1。

    97820

    C++17常用新特性(十)---模板特性:字符串变量当做模板参数

    在C++的历次版本发布中,对C++模板参数的标准一直保持开放的态度,且对参数的要求也在逐渐放宽。从C++17开始,非类型的模板参数也可以在使用时定义了而不必定义在不同的作用域。...对于字符串变量,使用方式和之前的版本并没有太大的区别,都不能直接在模板类型参数中使用。...C++17除了继续遵守这个规范外,相对于之前的版本它允许在实例化模板的作用域内声明,然后使用。不得不说也算是一种进步了吧。...但是从C++17开始,可以在模板中使用一个返回指针的函数当做实参,如下面的代码在C++17版本编译器中可以通过: #include using namespace std; template...+14版本编译器中编译报错如下: 从报错信息可知,在C++17以前的版本中,使用指针作为模板的实参时需要对参数进行连接且不能将编译器内返回指针的函数在模板实例化时进行使用。

    1.8K30

    半导体 ,p型和n型半导体的区别

    在晶体管(二极管、三极管等等)未发明之前,初期电子计算机使用的是电子管,但是电子管体积巨大、功耗高、寿命短;人类第一台电子计算机使用18000个电子管,重30吨,占地150平方米,耗电功率高达150千瓦...科学家发明了晶体管,晶体管功耗低、体积小且寿命长,最早的晶体管是使用半导体材料锗来制作的,从此微电子出现在人们视野当中。...我们把N型半导体和P型半导体进行组合,可以形成PN结,这是电子芯片当中的重要结构,我们把各种结构进行组合,就可以完成特定的逻辑运算(比如与门、或门、非门等等)。...p型和n型半导体的区别 1、形成原因不同 在半导体中掺入施主杂质,就得到N型半导体;施主杂质:周期表第V族中的某种元素,例如砷或锑。...P型半导体即空穴浓度远大于自由电子浓度的杂质半导体。由于P型半导体中正电荷量与负电荷量相等,故P型半导体呈电中性。

    25710

    P4用软件实现和硬件实现的区别

    资源限制因素是所需功能的复杂性和使程序适合目标资源。我们的软件目标使用t4p4s P4编译器,它产生DPDK兼容的[4]代码,运行在商业现成的(COTS)基于CPU的系统上。...P4的一个吸引人的特性,不仅仅是对航空电子设备,是它的设计促进了程序行为的简化验证,例如,在P4没有环路。刘等人[9]和内维斯等人[10]演示了使用断言来识别应用程序中的错误的程序的验证。...第一步(实心蓝色箭头,称为无P4)不包括任何与P4相关的代码,只专注于使用DPDK接收和发送数据包。这是为了了解底层DPDK运行时的性能开销。...基于图4a,我们使用线性回归来模拟基线中位延迟 ? 与时钟频率为2 GHz的CPU内核数量的关系: ? 该基线用于评估和比较在P4程序中利用匹配动作表添加P4指令的影响。...我们只依赖于使用的总键宽度,而不是键分段和表键的数量。因此,我们可以使用等式(10)来表示不同键宽度的资源使用情况: ? 其中p是梯度,q是插值函数的偏移,取决于匹配类型。

    2.6K31

    C++ 的发展

    标准化过程:从 C++98 到 C++11,再到 C++14、C++17 和 C++20,C++ 逐渐成为一种具有广泛应用的编程语言,每个版本都带来了一些新的特性和增强,逐步适应现代软件开发的需求。...std::make_unique 是 C++14 引入的,它比直接使用 new 更加安全和方便。...C++14 的局限性: 更新较小:相比 C++11,C++14 的新特性较少,更多的是对 C++11 特性的增强和补充。因此,C++14 的使用场景更多是在已有代码的优化和小修小补上。...C++17(也被称为C++ 2017)是C++编程语言的一个重要版本,它在C++11和C++14的基础上进行了许多改进,增强了语言特性、库功能以及编译器支持。C++17的主要亮点包括: 1....改进的constexpr C++17扩展了constexpr的功能,允许在编译时执行更多的操作,比如动态分配内存和使用if语句。

    61810

    C++17, 语言核心层有哪些新的变化?

    看到一个介绍 C++17 的系列博文(原文),有十来篇的样子,觉得挺好,看看有时间能不能都简单翻译一下,这是第一篇~ C++11, C++14, 以及 C++17.....如果你熟悉C++,那么你一定知道 C++98(第一个C++标准) 和 C++11 是两个非常大的C++标准, 但C++14,特别是C++03则是两个小标准....那么 C++17 是大标准还是小标准呢?从我的观点来看,答案其实挺简单的: C++17 介于 C++14 和 C++11 之间,既不属于大标准也不属于小标准,至于原因,看看下面的说明吧....< std::endl; return 0; } 22行和23行代码从C++第一个标准开始(C++98)便是合法的,但是25行及26行代码则只能在C++17中编译通过,因为在C++17之前,你必须使用尖括号...C++ 中移除了三字符组(trigraphs),这意味着你不能使用C++17写出下面这种"混乱"的代码了: int main() ??< ??(??)??(); ??

    86020

    1080P和2K的关联与区别

    其实挺简单,直接上概念,一起看看什么是P什么是K;P:P对应的释义是progressive scanning,译为逐行扫描,这个概念相信不少人都听过。...逐行扫描是个历史遗留概念,早期显示器采用逐行扫描的方式,阴极射线枪发出的电子束打在涂有荧光粉的荧光屏上,产生RGB三色基,最后合成一个彩色图像。...在现在的意义上,几P就是纵向有多少行像素,比如1080p就是纵向有1080行像素。...例如这几个常见的分辨率1440x1080(1.33),1920x1080(1.78),2581x1080(2.39),3840x1080(3.56)都可以叫1080P;K:K就是通俗意义上的“千”,2K...与P的概念类似,同样不是一个固定的分辨率组合,2560*1440与2560*1600都是2K。1080P算2K么?算,但是1080P宣传成是2K不地道。

    1K10

    C++0x 通用属性

    ,因为使用了原子变量a对p赋值时使用了memory_order_consume内存顺序模型,所以需要保证a.load先于任何关于a(或者p)的操作,编译其往往会在func函数之前加入一条内存栅栏。...); } 那么对于func函数来说,由于使用memory_order_release的内存顺序,p2.store对p的使用会被保证在任何关于p的操作之后进行。...3.C++14与C++17通用属性 在C++11的基础上,C++新标准C++14与C++17对通用属性进行了补充,主要有: (1)[[deprecated]]与[[deprecated(“reason”...)]] 标准:C++14; 作用:指示允许使用声明有此属性的名称或实体,但因reason不鼓励使用; 示例:class [[deprecated]] Outdate{};。...示例: [[maybe_unused]] int a = something(); 使用以上通用属性,可以帮助我们更好的优化和管理代码。

    91420

    C++发展概述

    C++从最初的C with class,经历了从C++98、C++ 03、C++ 11、C++ 14再到C++17多次标准化改造,功能得到了极大的丰富,已经演变为一门集面向过程、面向对象、函数式、泛型和元编程等多种编程范式的复杂编程语言...到了1972年,Bell实验室的Dennis Ritchie和Ken Thompson共同发明了C语言,并使用C重写Unix。...这些新的特性随着C++11标准的发布而被正式确立下来。近年来,C++标准的变更周期缩短,由C++11到C++14以及最近的C++17都只用了3年的时间。...C++14 是对 C++11的重要补充和优化,是C++发展历程中的一个小型版本,虽然新增的内容较少,但是仍然为用户“带来了极大的方便”,为实现使C++“对新手更为友好”这一目标作出努力。...到了2017年,C++迎来了C++17标准。此次对C++的改进和扩增,让C++变得更加容易接受和便于使用了。

    71410

    c++17好用的新特性总结

    C++14在11的基础上查缺补漏,并未加入许多新特性,而C++17作为C++11后的第一个大版本,标志着现代C++逐渐走向成熟。...c++17 std::pair p3{3.14, "pi"s}; if constexpr if constexpr语句是编译期的if判断语句,在C++17以前做编译期的条件判断往往通过复杂SFINAE...在c++17之前,只能自己通过独占锁和条件变量自己实现读写锁或使用c++14加入的性能较差的std::shared_timed_mutex。...c++17之前,我们处理只读字符串往往使用const std::string&,std::string有两点性能优势: 兼容两种字符串类型,减少类型转换和内存分配。...总结一下,c++17新增的三种类型给c++带来了更现代更安全的类型系统,它们对应的使用场景是: std::any适用于之前使用void*作为通用类型的场景。

    3.4K10
    领券