C++ 易踩坑总结以及小技巧

news/2024/10/19 8:22:12

1. for循环中在栈上创建的对象可能具有相同的地址,进行指针操作时需注意;所以循环中最好使用new来创建指针并操作地址;

for (int x : arr) {ClassName obj(); \\ it is like to have the same address in every loopClassName obj2 = new ClassName();std::cout<<&obj<<std::endl;
}

2. 模板函数的声明与定义最好放到同一个头文件中,否则会出现编译时没有正确找到symbol的错误。

image

3. 对于&等运算符的类外重写最好添加inline,否则可能会出现duplicate symbol的编译错误;

3. 指向子类对象的父类指针无法直接访问子类新添加的成员,但是可以在原本就有的函数中重写此函数来达到间接访问;

#include <iostream>class Base {
public:virtual void func() {std::cout << "Base function" << std::endl;}
};class Derived : public Base {
public:void func() override {std::cout << "Derived function" << std::endl;newMember(); // 在重写函数中访问子类的新成员}void newMember() {std::cout << "New member function of Derived" << std::endl;}
};int main() {Base* basePtr = new Derived();basePtr->func(); // 输出 "Derived function" 和 "New member function of Derived"delete basePtr; // 清理内存return 0;
}

5 enable_if/enable_if_t

https://www.luozhiyun.com/archives/744

6.为模板参数提供多种构造函数返回方案,编译报错

image
因为在这里,我为模板参数EDGEIT根据成员变量的不同设置了多个构造方法,以期望我对于模板参数EDGEIT的不同实际类针对返回,比如对于类1,定义为有四个参数的构造函数,对于类2定义为有五个参数的构造函数,期望他们就会对应进行选择。
然而在编译过程中,对于每个构建的类都会尝试每个分支的可能性,比如对于类1会尝试三四五所有的分支构造,因为这里是模板参数,我们要使得所有传进来的类都能满足这个参数所做出的所有行为。所以这样的方式是错误的。正确的做法应该是根据参数的不同启用不同的模板函数,即使用std::enable_if这样的
SFINAE技术。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/72667.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

【转载】 蚂蚁集团骆骥谈如何打造下一代智能数据体系

【转载】 蚂蚁集团骆骥谈如何打造下一代智能数据体系 本文整理自2024外滩大会“Data+AI”见解论坛骆骥(蚂蚁集团数据平台与服务部负责人)的演讲实录在过去这两年时间,生成式人工智能在科技领域取得了重大的突破,海量的数据和庞大的算力相碰撞,推动了无数科技产品的创新。在…

2024.09.11星期三

今天学习了springboot的相关知识,由于自己使用原生的Maven经常出现tomcat配置 与hive数据库冲突的问题,因此选择了内置tomcat不需要自己配置也更加先进的springboot 确实也该学习一些新的技术不能总是局限于原生的javaweb了 以下是今天踩的一些坑 1.用IDEA创建springboot项目…

2024.09.11

今天主要继续学习了springboot的相关内容,在昨天实现了基础的登录功能后,今天对增删改查有了更深刻的认识 特别是通过连接hive,对于网页的getmapper和postmapper有了更深刻的认识,实现了基础的增删改查并且优化了 页面 repository包,其中建立了类,这个类就是用于继承JpaR…

2024-10-17_Thu_13:52 - 财富目标:求其上者得其中

2024-10-17_Thu_13:52 - 财富目标:求其上者得其中 ​​ 态势:攻与守有钱人玩金钱游戏是为了赢。穷人玩金钱游戏是为了不要疏。意念的力量很惊人!‍ 目标:求其上者得其中,求其中者得其下,求其下者无所得致富法则 如果你的目标是过得舒服就好,你就很可能永远也不会有钱。但…

完全指南:如何高效进行业务应用开发?

了解如何通过 NocoBase 的无代码平台简化业务应用开发。本文涵盖了从业务需求定义到工作流程自动化及安全管理的关键策略,帮助企业构建灵活、可扩展的应用。❤️ 温馨提醒 本篇文章较长,你可以根据目录选择最感兴趣的部分阅读。当然,我相信如果你全部阅读完,一定会有不少的…

折腾 Buffalo LS-WXL/R1 (开启SMBv2)

无聊刷咸鱼看到一个只要50的NAS还带电源,没忍住爱捡垃圾的手买了下来。成色也还可以。根据卖家的提醒,需要下载一个初始引导软件「BUFFALO NAS Navigator2」,还提供了官方下载地址: http://www.buffalo-asia.com/support/downloads/?lang=zh-cn点进去后就跳转到了 http://…

修改织梦网站后台的信息?

要修改织梦(DedeCMS)网站后台的信息,通常涉及以下几个步骤:登录后台:打开你的织梦网站后台管理页面,输入管理员账号和密码进行登录。进入系统设置:登录后,在后台首页左侧菜单栏找到“系统”选项,点击进入系统基本参数设置。修改基本信息:在系统基本参数设置页面,你可…

使用Tftpd32工具数据互传是一种什么体验?SSD201/202D开发板演示,深圳触觉智能嵌入式方案商

本文介绍了Tftpd32工具的使用方法,方便电脑与开发板文件互相传输。使用到的是触觉智能的Purple Pi R1双网口开发板,搭载了SigmaStar SSD201/SSD202D芯片,是嵌入式新人入门学习的高性价比开发板!本文介绍了Tftpd32工具的使用方法,在我们使用开发板过程中常常需要将电脑与开…