zoukankan      html  css  js  c++  java
  • C++冷知识(1)

    func()等价于func(void)

    也就是说在C++中,参数列表为空意味着不接受任何参数。之所以要注意这一点是因为在C语言中,参数列表为空意味着参数不确定。两者的语义是有巨大差别的,作为学了C再学C++的人来说,是需要注意的一点。

    void指针无法隐式转换为其它类型指针

    需要通过static_cast<T*>语法来显式转换,同样也是跟C中的语法不一致,C语言中是允许void指针直接赋值给其它类型指针的。一个最好的体现两者区别的例子就是C和C++中对NULL宏定义的不同:

    #undef NULL
    #ifdef __cplusplus
        // C++
        #define NULL 0
    #else
        // C
        #define NULL ((void *)0)
    #endif
    

    char不一定等于signed char

    实际上,C++标准中没有规定char类型的符号,依赖于具体的实现,这一点和其它的整型类型都不同。所以要使用char类型来进行小整数运算的时候最好明确指定其符号。

    const全局变量默认作用域为当前cpp文件

    为了能在头文件中定义const全局变量,C++规定const全局变量默认具有内部链接属性,若要将其作用域扩大到全工程,那么需要在定义处手动加上extern关键字:

    // 这两行全局变量定义等价
    const int MAX = 233;
    static cosnt int MAX = 233;
    

    创建struct union enum对象时不必带上这几个关键字

    在C语言中是需要带上相应的关键字的,在C++中这几种类型和class类型一样,只需要写类型名即可:

    struct Foo {
        int count;
    };
    
    // ok
    Foo foo;
    

    忽略参数的处理

    有时候不需要处理函数调用传进来的一些参数,但如果放置没有用的参数不管可能会引起编译警告甚至错误,这个时候就需要手动指定忽略参数的处理:

    // 方法一
    void func(int n, int m) {
        // 忽略参数m
        (void)m;
    
        std::cout << n << std::endl;
    }
    
    // 方法二
    void func(int n, int) {
        std::cout << n << std::endl;
    }
    
  • 相关阅读:
    使用php语言生成二维码
    简单的二级目录 操作
    上传图片 以及做成缩略图
    第一天 :学习node.js
    中文api接口
    PHP中获取当前页面的完整URL
    tp中session用来做权限方法 (缓解mysql压力)
    时间倒计时
    static关键字
    Windows程序内部运行原理简介
  • 原文地址:https://www.cnblogs.com/HachikoT/p/12159105.html
Copyright © 2011-2022 走看看