首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C++】Chapter 0:当你学习C++之前首先需要了解的

函数签名由函数的名称和参数类型组成。当在C++中定义多个函数具有相同的名称但不同的参数类型或参数个数时,编译器可以根据函数签名来区分它们,从而保证不会冲突,并选择正确的函数进行调用。...但 NULL 本质上是 #define NULL 0,属于整数 0,容易导致歧义。歧义如下: C++11 引入 nullptr,专门用于表示空指针,避免了 NULL 的问题。...3. nullptr 适用场景 初始化空指针 int* ptr = nullptr; // 推荐 函数重载时避免歧义 void foo(int); void foo(char*); foo(0);...; // 代替 NULL,更清晰 } 与 nullptr_t 结合使用 std::nullptr_t nptr = nullptr; // `nullptr_t` 只能存 nullptr 4....结论 ✅ C++11 及以上版本推荐使用 nullptr 代替 NULL 和 0,避免歧义,使代码更安全、可读性更强。 5.引申 语法更新的宗旨是向前兼容,旧的东西依然可用,但新版本有更好的方法替代。

7300

【C++掌中宝】C++ 中的空指针救世主——nullptr

运行结果如下: 由于 NULL 被定义为 0,这里会调用 int 参数的版本,而不是我们期望的指针版本,所以最后两个结果都是选择int 参数的版本。 3....C++11 引入 nullptr 的原因 为了消除 NULL 在 C++ 中的二义性问题,C++11 引入了 nullptr 作为一种新型空指针常量。...以下是一个简单的实现: const class nullptr_t { public: template operator T*() const { return 0;...总结 NULL 是一个历史遗留的宏定义,虽然在 C++ 中仍然可以使用,但它会在特定场景下引发意外的行为和错误。为了消除这些问题,C++11 引入了 nullptr,作为一种类型安全的空指针表示。...今天的分享到这里就结束啦!如果觉得文章还不错的话,可以三连支持一下。 也可以点点关注,避免以后找不到我哦! Crossoads主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是作者前进的动力!

17010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C++指南】C++中nullptr的深入解析

    重载歧义:在函数重载时,如果两个函数分别接受整数和指针类型的参数,而NULL被错误地传递给整数参数的函数,这种错误在编译时不会被捕获。...二、nullptr的特点 1.类型安全 nullptr的类型是std::nullptr_t,这是一个特殊的类型,专门用于表示空指针。...4.与智能指针的交互 nullptr可以与C++的智能指针(如std::unique_ptr、std::shared_ptr等)一起使用,用于初始化或表示智能指针不拥有任何资源的情况。...int* ptr = nullptr; 2.函数参数和返回值 在函数参数和返回值中,nullptr用于表示空指针或无结果的情况。...3.可读性 NULL:可能引起歧义,不容易分辨其具体含义。 nullptr:明确表示空指针的含义,更易于阅读和理解。

    15210

    关于nullptr这篇文章你一定要看

    nullptr使用代码如下: int *ptr = nullptr; 同样是表示空指针,之前NULL使用的好好的,为什么要引入nullptr? nullptr和NULL又有什么区别呢?...); // char* return 0; } 另一个原因是在C++的函数重载中,传入NULL会导致编译失败,所以需要引入nullptr,使用nullptr可以解决函数重载中的参数匹配问题。...所以如果编译器支持nullptr,一定要使用nullptr。 空指针应该有什么特性吗? 1. 它应该有一个自己的名字,它应该是一个保留关键字。 2....因为它的取址操作被delete修饰了。 使用nullptr还有什么好处呢?可以用于抛出异常。...throw nullptr; } catch(nullptr_t) { ... } } 之后使用它的类型nullptr_t捕获,这里如果throw NULL,那用什么类型去

    57530

    快速从C过度C++(二):引用,内联函数,nullptr

    函数参数传递 const 引用常用于函数参数传递,特别是当函数不需要修改参数的值时。这种方式可以避免不必要的拷贝,同时保证参数的值不会被意外修改。...主要特点 减少开销:避免函数调用的压栈、跳转和返回操作,提升效率。 代码膨胀:函数体被直接插入调用处,可能增加生成的可执行文件大小。...特性 nullptr (C++11) NULL (C/C++) 类型 是 std::nullptr_t 类型,可以隐式转换为任意指针类型 通常是 0 或 (void*)0,是一个宏定义 类型安全 类型安全...为什么需要 nullptr? 类型安全问题 在 C++ 中,NULL 通常被定义为 0 或 (void*)0,这可能导致类型混淆。...C++ 类型系统的改进 nullptr 是 std::nullptr_t 类型,可以隐式转换为任意指针类型,但不能转换为整数类型,增强了类型检查。

    6210

    C++11新关键字

    关键字nullptr是std::nullptr_t类型的值,用来指代空指针常量。...int* p1 = NULL; //或 int* p2 = nullptr; 在使用nullptr_t与nullptr时,注意以下几点: (1)可以使用nullptr_t定义空指针,但所有定义为nullptr_t...; (4)nullptr_t类型对象不能用于算术运算表达式; (5)nullptr_t类型对象可以用于关系运算表达式,但仅能与nullptr_t类型或指针类型对象进行比较,当且仅当关系运算符为==、...constexpr可以修饰函数参数、函数返回值、变量、类的构造函数、函数模板等,是一种比const更加严格的约束,它修饰的表达式除了具有“运行时常量性”,也具有“编译时常量性”,即constexpr修饰的表达式的值在编译期间可知...B3::f函数吗?

    3.1K10

    C++ 11 nullptr关键字

    除了NULL之外,C++11新标准中又引入了nullptr来声明一个“空指针”,这样,我们就有下面三种方法来获取一个“空指针”:如下:int *p1 = NULL; // 需要引入cstdlib头文件int...到这里,大家心里有没有疑问:为什么C++11要引入nullptr?它与NULL相比又有什么不同呢?这就是我们今天要解决的问题。...那么问题又来了,我们从一开始学习C++的时候就被告诫C++是兼容C的,为什么对于NULLC++却不完全兼容C呢?通过查找维基百科,才发现这其中的原因。...nullptr关键字真是为了解决这个问题而引入的。另外我们还有注意到NULL只是一个宏定义,而nullptr是一个C++关键字。...nullptr如何使用nullptr关键字用于标识空指针,是std::nullptr_t类型的(constexpr)变量。

    2.5K20

    Modern c++快速浅析

    模板类型推导 模板类型推导中最重要的是弄清它什么时候会抛弃引用,什么时候会抛弃常量性 •template void func(T& param);在这个示例函数中,如果传递进是一个...([](const std::vector& _data) { /* */ }, std::move(data)); 除了“移动捕获”外,还可以利用初始化捕获来初始化Lambda表达式中所需要使用的变量...:C++中不允许void*指针隐式转换为其他指针类型,即下面代码是非法的 int* p = (void*)0; nullptr是C++11中的一个关键字,它的类型是std::nullptr_t #ifdef...__cplusplus namespace std { typedef decltype(__nullptr) nullptr_t; } using...::std::nullptr_t; #endif default和delete C++11前利用private以阻止访问成员函数,并且不给出它们的实现,如果在用户代码中仍然去访问此没有实现的成员函数,那么会在链接阶段得到错误

    20410

    C++入门知识(二)

    6.引用 1.什么是引用? 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。...指针和引用的自增(++)运算意义不一样; 8.从内存分配上看:程序为指针变量分配内存区域,而引用不需要分配内存区域。 7内联函数 1什么是内联函数?...还有: void func(int); void func(char); 如果NULL被定义为0,func(NULL)会去调用void func(int),这是不合理的 所以引入...nullptr的类型为nullptr_t,能够隐式的转换为任何指针。...nullptr 与 nullptr_t: typedef decltype(nullptr) nullptr_t; 注意: 在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C

    53910

    C++11学习笔记1

    显然,这玩意并没什么用,于是在C++11里,他就变成了可以自动推导的变量类型。...他出现的目的,主要是由于我们懒得写那些巨长无比的类型名,最典型的用处就是在声明迭代器的时候: std::map mp; for(std::map<double,double...用途 虽然decltype在泛型中有一些重要的用法,但是最常用的用一个类型来定义另一个类型: typedef decltype(nullptr) nullptr_t; typedef decltype(..... } for(auto i : {1,2,3,4}){ ... } 除了能循环数组,vector这类容器之外,还能迭代map等特殊容器,不过需要注意的是,对于map来说,我们获得的迭代变量是...::coutstd::endl; } } 输出结果是: 2 4 6 参考资料 auto 基于模板的参数推断 decltype 类型别名 深入应用c++11 C++FAQ

    33210

    C++11之nullptr

    我们看一个例子: #include using std::cout; void f(int* p) { cout << "int* f\n"; } void f(int a)...我们看到,NULL作为参数的时候,实际并没有调用指针为形式参数的函数,而是调用了形式参数为int的函数。当我们使用强制转换的时候,没有什么问题。因此,这样的调用可能是违背我们的原意的。...所以C++11引入了新的指针空值nullptr。很好的解决了上面出现的违背原意的操作。C++11把nullptr作为一个关键字引入。它本身是“指针空值类型”的一个常量。...指针空值常量类型被命名为nullptr_t。...我们可以看到,它按照我们原本的意思,成功的调用了指针类型的重载函数。 但是需要注意的是nullptr的地址是不能被用户使用的。

    64320

    【Cocos2d-x游戏开发】细数Cocos2d-x开发中那些常用的C++11知识

    除了shared_ptr之外,还有weak_ptr,但是weak_ptr并不拥有其所指向的对象,因此不影响该对象的销毁与否,也不能对weak_ptr解引用,只能判断该指针是否已经被销毁。...空指针nullptr的存在是为了解决NULL的二义性问题,因为NULL也可以代表0,nullptr的类型为nullptr_t,能隐式转换为任何指针或者是成员指针的类型,也能和它们进行相等或者不等的比较。...lambda的写法如下: [函数外部对象参数] (函数参数) -> 返回值类型{ 函数体}   (1)[ ]中的函数外部对象参数,允许在函数体内直接调用函数外部的参数;   (2)( )中的参数,同正常函数的参数没有什么差异...[&,a]除了a用传值的方式,其他变量都已引用的方式传入   6....[=,&a]除了a用引用的方式传入,其他变量都以传值的方式传入   下面让我们通过一个例子来了解一下,当在lambda中使用了“=”传入的参数,且对引用参数或者外部参数进行赋值操作之后,会产生意想不到的结果

    48330
    领券