从视觉SLAM方案中理解C++的语法条款(三)

本文通过开源项目ORB_SLAM2和EffectiveC++实例,讲解视觉SLAM中的C++编程技巧,涉及接口验证、类设计原则、类型转换和封装性等内容,旨在帮助学习者提升C++编程理解与实践能力。
摘要由CSDN通过智能技术生成

 本系列之前的文章:

从视觉SLAM方案中理解C++的语法条款(一)-CSDN博客

从视觉SLAM方案中理解C++的语法条款(二)-CSDN博客


和前两篇文章相比本文更多的是经验而不是知识。


💫前言:

       本文以开源ORB_SLAM2为例,分析Scott Meyers大佬的Effective C++,同时还用到了视觉slam十四讲高博的开源代码。使用这些素材其实是因为我最近也在学习SLAM,发现自己对SLAM代码中的许多语法不明所以。希望这个系列能给大家带来收获,我们一起进步!

💫资料链接:

链接: https://pan.baidu.com/s/16eN1vPq3Et1LEpXWlwColQ?pwd=hzfn 提取码: hzfn 复制这段内容后打开百度网盘手机App,操作更方便哦
内含:ORB_SLAM2代码,kitti数据集 2个G, Effective C++ PDF, 视觉SLAM十四讲从理论到实践  第2版.pdf 


条款18:让接口容易被正确使用,不易被误用

用户输入数据后要检验数据是否在合理范围内 

🌈条款19:设计class犹如设计type

你应该带着和“语言设计者当初设计语言内置类型(type)时”一样的谨慎来探讨class的设计。 

这个条款提出了12个设计C++class的问题,我选择部分问题,尝试去回答。其他问题,有兴趣的读者可以通过文章最上方的链接,从百度网盘获取原文阅读。

你的新type需要什么样的转换?

 如果你希望允许类型T1之物转换为类型T2之物,就必须在T1内写一个类型转换函数operator T2,或者作为友元。

// one-argument 的构造函数可以隐式调用,像这样:

class A
{
private:
    int a_;
public:
    A(int a)
    {
        a_ = a;
    }
};

void test01()
{
    A a1 = 1;  // 隐式调用构造函数
    A a2(1);
}

 注意,只有单参构造函数可以隐式调用,多参不允许。

class A
{
private:
    int a_;
public:
    explicit A(int a)  // 用explicit关键字修饰后,禁止隐式调用单参构造函数
    {
        a_ = a;
    }
};

谁该取用新type的成员?

这个问题可以帮助你决定哪个成员为public,哪个为protected,哪个为private,已经哪个类或函数应该是friends。

条款20:宁以pass-by-reference-to-const替换pass-by-value 

参见条款01

🌈条款22:将成员变量声明为private

🔥🔥下面这位博主写的很好,建议这个条款直接阅读他的文章:15.9为什么要将成员变量设置为private_实现类文件变量为啥定义成private-CSDN博客

下一个条款会进一步说明这一点

🌈条款23:宁可以non-member non-friend函数替换member函数

它们可以导致较大的封装性,因为它们并不增加“能够访问class内之private成分”的函数数量:

例如:

 作者建议使用后一个non-member函数,因为这样并不增加“能够访问class内之private成分”的函数数量。这样就有较大的封装性

作者在这里提到了namespace的用法

此外,因为在意封装性而让函数成为non-member,并不意味这它不可以成为另一个class的member(这对于熟悉Java的人友好)

条款26:尽量延后变量定义式的出现时间

变量要用的时候再去定义它,因为存在构造和析构函数的运行成本。

条款27:尽量不要使用类型转换

旧式类型转换:

int i = 1;
double j = (double)i;  // 旧式类型转换

新式类型转换 :

const_cast<T>(obj);  // const对象转换为non-const对象的唯一方法

static_cast<T>(obj);  // 强迫隐式转换,可以基类对象转换为派生类对象

 🔥(以下是迭代器+智能指针的使用范例)

  • 63
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值