C++语法总结

类模板的作用:
1:增加类之间代码的通用性,例如:Point<int>, Point<float>, Point<double>

2:inline的作用,内敛函数; 建议编译器把函数内的内容,放到调用时执行;inline 关键字是一种对编译器的建议(注意只是建议,编译器最终是否真正内联函数由编译器自行决定),用于提示编译器将该函数的代码在调用点处展开,而不是像普通函数那样进行常规的函数调用(涉及压栈、跳转、返回等操作)例如

inline int add(int a, int b ) { return a+b;}

int result = add(3, 5);
// 就相当于调用 int result = 3+5 ; 对于简单的函数非常有用能提高效率

 3:======= const 的作用 ======

// 1:PoseGraph2D* const parent_; 和 const PoseGraph2D* parent_; 的区别

    //***** PoseGraph2D* const parent_; *****
    指针本身是常量:
    这里的 const 关键字修饰的是指针 parent_ 本身,而不是指针所指向的对象。
    这意味着 parent_ 指针在初始化之后,不能再指向其他对象。

    PoseGraph2D* const parent_ = new PoseGraph2D();
    // 以下操作会导致编译错误,因为 parent_ 指针本身是常量
    parent_ = new PoseGraph2D(); 
    parent_->someMember = 42; // 假设 someMember 不是 const 成员,这是允许的



    //**** const PoseGraph2D* parent_; ****
    指针所指向的对象是常量:
    这里的 const 关键字修饰的是指针 parent_ 所指向的 PoseGraph2D 对象,而不是指针本身。
    这意味着不能通过 parent_ 指针修改其所指向的 PoseGraph2D 对象的成员。

    const PoseGraph2D* parent_ = new PoseGraph2D();
    // 以下操作会导致编译错误,因为 parent_ 指向的对象是常量
    parent_->someMember = 42; 
    parent_ = new PoseGraph2D(); // 这是允许的,因为指针本身不是常量

//2:  const 在函数前  和 函数后的区别
    
     结论: 在函数前, 表示返回值不能被修改; 在函数后, 表示改函数不会修改任何成员变量和调用任何非const 的成员函数;
    
    
//3: 函数内的 const 修饰成员变量 void printValue(const int& val) {}
    
     这个表示 val 在函数内不能被修改,同时传入引用可以避免拷贝带来的耗时

### C++语法总结 #### 1. 基础语法 C++ 的源文件扩展名为 `.cpp`,程序的入口是 `main()` 函数[^1]。 以下是简单的 Hello World 示例代码: ```cpp #include <iostream> using namespace std; int main() { cout << "hello world !!!" << endl; return 0; } ``` 在该示例中,`cout` 使用左移运算符 `<<` 进行输出操作,而 `endl` 表示换行并刷新缓冲区。 #### 2. 输入与输出 C++ 中常用的输入输出方式为 `cin` 和 `cout`,分别对应标准输入流和标准输出流。 `cin` 使用右移运算符 `>>` 来读取数据[^1]。 #### 3. 访问说明符 C++ 提供了三种主要的访问说明符来增强类的封装性: - **public**:公有成员可以在整个程序范围内被访问,通常用于定义类的接口。 - **private**:私有成员仅限于类内部及其友元函数访问,主要用于隐藏实现细节。 - **protected**:受保护成员类似于 private,但在派生类中也可访问[^4]。 #### 4. 引用机制 C++ 支持引用的概念,分为两种类型: - **左值引用**:绑定到已命名的对象,允许修改原始变量的内容。 - **右值引用**:引入自 C++11,专门用于临时对象或表达式的优化处理[^3]。 以下是一个关于左值引用和右值引用的例子: ```cpp void Fun(int& x) { cout << "左值引用" << endl; } void Fun(const int& x) { cout << "const 左值引用" << endl; } void Fun(int&& x) { cout << "右值引用" << endl; } void Fun(const int&& x) { cout << "const 右值引用" << endl; } int main() { int a = 10; const int b = 20; Fun(a); // 调用了左值引用版本 Fun(b); // 调用了 const 左值引用版本 Fun(100); // 调用了右值引用版本 return 0; } ``` #### 5. 函数重载与模板 C++ 支持通过参数列表的不同形式实现函数重载。此外,在 C++11 中还引入了万能引用和完美转发技术,使得函数能够灵活地接受不同类型的实参[^2]。 下面展示了如何利用函数模板实现完美的类型匹配: ```cpp template<class T> void Perfect(T&& x) { Fun(std::forward<T>(x)); } int main() { int x = 1; Perfect(x); // 调用左值引用版本 Perfect(move(x)); // 调用右值引用版本 return 0; } ``` #### 6. 类与继承 C++ 是一种支持面向对象编程的语言,提供了丰富的特性如类、继承、多态等。通过基类指针指向派生类对象的方式可以实现运行时多态行为。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值