zoukankan      html  css  js  c++  java
  • nullptr 与 constexpr

    nullptr

      nullptr出现的目的自然是替换NULL的低位。C++可能会将NULL、0视为同一种东西。这取决于编译器是如何定义的,有的编译器定义NULL为 **( (void * )0) **,有的直接定义为0,这样的化在程序中可能会出现意想不到的错误,例如它会破坏函数的重载功能,考虑下面的重载函数

    void function(char *p);
    void function(int x);
    

    那么当调用 function(0)时将会调用哪一个函数呢?这可能会在不同编译器产生不同结果。C++11引入nullptr 专门来区分0和NULL,nullptr的类型是nullptr_t

    #include<iostream>
    using namespace std;
    
    void test(char*p){
    	puts("调用的是char *");
    }
    
    void test(int x){
    	puts("调用的是int");
    }
    
    int main(){
    	test(0);
    	test(nullptr);
    	return 0;
    }
    /*
    调用的是int
    调用的是char *
    */
    

    今后尽量使用nullptr避免使用NULL

    constexpr

      C++本身具备常量表达式的概念,常量表达式(const expression)是指值不会改变并且在编译过程中就得到计算结果的表达式,如果编译器能够在编译时就把这些表达式直接优化并植入到程序运行时,将能增加程序的性能。C++11 提供了 constexpr 让用户显式的声明函数或对象构造函数在编译器会成为常数,在C++11中常量constexpr修饰的函数可以采用递归形式。

  • 相关阅读:
    故障分析 | 全局读锁一直没有释放,发生了什么?
    日常笔记
    BCC观测工具的使用
    wireshark的应用
    SQL基础之实现累加值
    SQL查询语句使用rand()的执行效率与优化
    MySQL主从复制相关问题
    LVM不停机扩容
    gtid跳过错误的方法
    IO诊断文档
  • 原文地址:https://www.cnblogs.com/td15980891505/p/7411311.html
Copyright © 2011-2022 走看看