DAY 1(未完成)
本文最后更新于39 天前,其中的信息可能已经过时,如有错误请发送邮件到PZ_0828@163.com

:: 双冒号 作用域运算符

直接:: 表示作用域为全局作用域

命名空间namespace

核心作用

  • 解决命名冲突:隔离代码实体(函数、变量、类等)
  • 组织代码:模块化大型项目结构

关键特性

命名空间下可以存放 函数、变量、结构体、类…

//使用命名空间 打开一个叫std的房间
using namespace std;    
​
//命名空间必须放在全局作用域下
namespace test1
{
    void function();
    int A = 1;
    struct B{
        
    };
    class C{
        
    };
    //命名空间可以嵌套命名空间
    namespace test2
    {
        int A = 2;
    }
}

命名空间是开放的 可以随时随地往原来的命名空间添加内容

namespace test1{
   int AA = 11;
}
//此命名空间test1会和上面的命名空间test1进行合并

在使用命名空间时还会出现一种情况,即:无名/匿名命名空间

namespace{
int CC=33;
   int DD=44;
}
//当使用无名命名空间后,以上语句就相当于 static int CC; static int DD;
//且只能在当前文件使用

命名空间可以起别名

//命名空间别名

namespace LongNamespaceName { int value = 42; }
namespace Short = LongNamespaceName;  // 别名
​
void demo() {
    std::cout << Short::value;  // 输出42
}

使用方式对比

方式代码示例作用域影响
全引入using namespace MyLib;当前作用域全部可见
单实体引入using MyLib::print;仅引入特定实体
作用域运算符MyLib::version++;精确指定无污染

using声明和using编译指令

待补充

C++对C语言的增强

全局变量检测增强

// C: 允许重复声明
int global;
int global = 10;  // ✅ C允许

// C++: 严格检测
int global;
int global = 10;  // ❌ 错误:重定义

函数检测增强

C++作为C语言的加强版本,相关要求也更严格

// C: 弱类型检测
int function( a, b) // 参数无类型
{
   
}

void test()
{
function(1, 2, 3); // 参数超量 ✅ C允许
}
//以上为C语言写法,该写法没有问题
// C++: 强类型检测
int fuction(int a, int b)//参数类型增强,函数的参数必须要定义类型
{
    return a*b;//返回值检测增强,函数必须要有返回值
}
​
void test()
{
    function(1, 2);//函数调用参数检测增强,使用函数时传递参数个数必须与函数定义的一致
    func(1);                      // ❌ 错误:参数不足
}

类型转化检测增强

// C: 隐式转换
void test()
{
    char *p = malloc(sizeof(64));//malloc返回值是void*,✅ C允许void*隐式转换
}
​
// C++: 需显式转换
void test()
{
    char *p = (char *)malloc(sizeof(64));//malloc返回值是void*,在C++中void*变成char*,必须强转
}

struct 增强

// C: 单纯数据类型
struct Person
{
    int m_Age;
    //void plusAge();   //❌ C不允许成员函数
};
void test()
{
    struct Person p1;   //使用时必须带struct关键字
}
​
// C++: 类语义扩展
struct Person
{
    int m_Age;
    void plusAge(); //✅ 允许成员函数,C++中struct可加函数
};
void test()
{
    Person p1;  //C++可直接使用类型名,不需要加入struct关键字
    p1.m_Age = 10;
    p1.plusAge();
    cout<<p1.m_Age<<endl;
}

bool类型增强

在C语言中是没有bool类型的,C语言不认识bool这个关键字

但C++认识

bool flag = true; //只有真或假 true代表 真(非0)  false代表 假(0)
void test()
{
   cout <<sizeof(bool)<<endl;//输出:1
   
   flag = 100;
   //bool类型,非0的值转为 1, 0就转为0
   cout<<flag<<endl;
   
}

三目运算符增强

void test()
{
   int a=10;
   int b=20;
   
   printf("ret = %d\n", a > b ? a : b);
   cout<<"ret = "<<(a > b ? a : b)<<endl;
   
   //(a > b ? a : b) = 100; //在C语言中这句话会报错,C语言会翻译为 20 = 100; 在C语言的逻辑中这显然是不对的 C语言中返回的是值
  (a > b ? a : b) = 100; //b = 100 在C++中返回的是变量
   /*若C语言中想模仿C++,可以采用如下写法
   *(a > b ? &a : &b) = 100;
   printf("a = %d, b = %d \n", a, b);
   
   */
   
}
转载请标记原作者和来源!
作者:Aex
文章:DAY 1(未完成)
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,允许非商业性使用、修改和共享。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
猫meme
上一篇
下一篇