首页
学习
活动
专区
工具
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++),即*pp++。...int a[2],*p; p=&a; 那么*p就是a[0],(*p)++就是a[0]++,*(p++)就是a[0],然后p++。 因为数组指针就是数组在内存中起始地址,而且数组是连续存储....事实上,a[0]也可以写成p[0]。

11520

C++中auto关键字用法详解

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

14510

Modern C++,学炸了!!

stl 库,它们包括但不限于: 指针引用概念 指针与内存关系 程序编译过程,静态链接库动态链接库 static、const、#define用法区别 CC++区别 内存中堆分配 C++...C++17C++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,有兴趣朋友也可以下载下来看一下

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获取到句柄数特别大...,其实线程是使用了共享资源导致,下图是线程共享与独享示例: 线程共享 线程独享 地址空间 程序计数器 全局变量 寄存器 打开文件 栈 子进程 状态字 闹钟 信号及信号服务成勋 记账信息

3.7K50

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。

89620

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

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

1.4K30

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() ??< ??(??)??(); ??

77920

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*作为通用类型场景。

2.9K10

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++14C++17对通用属性进行了补充,主要有: (1)[[deprecated]]与[[deprecated(“reason”...)]] 标准:C++14; 作用:指示允许使用声明有此属性名称或实体,但因reason不鼓励使用; 示例:class [[deprecated]] Outdate{};。...示例: [[maybe_unused]] int a = something(); 使用以上通用属性,可以帮助我们更好优化管理代码。

87920

C++发展概述

C++从最初C with class,经历了从C++98、C++ 03、C++ 11、C++ 14再到C++17多次标准化改造,功能得到了极大丰富,已经演变为一门集面向过程、面向对象、函数式、泛型元编程等多种编程范式复杂编程语言...到了1972年,Bell实验室Dennis RitchieKen 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++变得更加容易接受便于使用了。

69410

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

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

2.4K31

1080P2K关联与区别

其实挺简单,直接上概念,一起看看什么是P什么是K;PP对应释义是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不地道。

93410

C++雾中风景12:聊聊C++中Mutex,以及拯救生产力Boost

recursive_timed_mutex C++11 结合 2,3 特点互斥量 shared_timed_mutex C++14 具有超时机制可共享互斥量 shared_mutex C++17...shared_lock C++14 共享互斥量管理 scope_lock C++17 多互斥量避免死锁管理 创建互斥量管理对象时,它试图给给定mutex加锁。...shared_mutex C++14版本之后提供了共享互斥量,它区别就在于提供更加细粒度加锁操作:lock_shared。...pthread_rwlock_t结构 这里有个事情挺奇怪C++14提供了shared_timed_mutex 而在C++17提供了shared_mutex。...不过太麻烦了,还得考虑互斥量管理类兼容什么,果断放弃啊) 多锁竞争 还剩下最后一个要写内容:scope_lock ,当我们要进行多个锁管理时,很容易出现问题,由于加锁先后顺序不同导致死锁。

91521

深入解析C++auto自动类型推导

这篇文章我们来解析auto自动类型推导推导规则,以及使用auto有哪些优点,还有罗列出自C++11重新定义了auto含义以后,在之后发布C++14C++17、C++20标准对auto更新、增强功能...如果你用auto来替代上面的定义,则完全可以避免这样问题发生,如: for (const auto& p : m) {} 新标准新增功能 自动推导函数返回值类型(C++14C++14标准支持了使用...使用auto声明lambda形参(C++14C++14标准还支持了可以使用auto来声明lambda表达式形参,但普通函数形参使用auto来声明需要C++20标准才支持,下面会提到。...auto限制 上面详细列出了使用auto好处使用场景,但在有些地方使用auto还存在限制,下面也一并罗列出来。...虽然不能支持声明非静态数据成员,但却可以支持声明静态数据成员,在C++17标准之前,使用auto声明静态数据成员需要加上const修饰词,这就给使用上造成了不便,因此在C++17标准中取消了这个限制:

13220
领券