精华内容
下载资源
问答
  • C++ explicit关键字详解

    万次阅读 多人点赞 2019-04-03 19:48:37
    首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit...

    首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).

    那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子:

    class CxString  // 没有使用explicit关键字的类声明, 即默认为隐式声明  
    {  
    public:  
        char *_pstr;  
        int _size;  
        CxString(int size)  
        {  
            _size = size;                // string的预设大小  
            _pstr = malloc(size + 1);    // 分配string的内存  
            memset(_pstr, 0, size + 1);  
        }  
        CxString(const char *p)  
        {  
            int size = strlen(p);  
            _pstr = malloc(size + 1);    // 分配string的内存  
            strcpy(_pstr, p);            // 复制字符串  
            _size = strlen(_pstr);  
        }  
        // 析构函数这里不讨论, 省略...  
    };  
      
        // 下面是调用:  
      
        CxString string1(24);     // 这样是OK的, 为CxString预分配24字节的大小的内存  
        CxString string2 = 10;    // 这样是OK的, 为CxString预分配10字节的大小的内存  
        CxString string3;         // 这样是不行的, 因为没有默认构造函数, 错误为: “CxString”: 没有合适的默认构造函数可用  
        CxString string4("aaaa"); // 这样是OK的  
        CxString string5 = "bbb"; // 这样也是OK的, 调用的是CxString(const char *p)  
        CxString string6 = 'c';   // 这样也是OK的, 其实调用的是CxString(int size), 且size等于'c'的ascii码  
        string1 = 2;              // 这样也是OK的, 为CxString预分配2字节的大小的内存  
        string2 = 3;              // 这样也是OK的, 为CxString预分配3字节的大小的内存  
        string3 = string1;        // 这样也是OK的, 至少编译是没问题的, 但是如果析构函数里用free释放_pstr内存指针的时候可能会报错, 完整的代码必须重载运算符"=", 并在其中处理内存释放  

     上面的代码中, "CxString string2 = 10;" 这句为什么是可以的呢? 在C++中, 如果的构造函数只有一个参数时, 那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象. 也就是说 "CxString string2 = 10;" 这段代码, 编译器自动将整型转换为CxString类对象, 实际上等同于下面的操作:

    CxString string2(10);  
    或  
    CxString temp(10);  
    CxString string2 = temp; 

    但是, 上面的代码中的_size代表的是字符串内存分配的大小, 那么调用的第二句 "CxString string2 = 10;" 和第六句 "CxString string6 = 'c';" 就显得不伦不类, 而且容易让人疑惑. 有什么办法阻止这种用法呢? 答案就是使用explicit关键字. 我们把上面的代码修改一下, 如下:

    class CxString  // 使用关键字explicit的类声明, 显示转换  
    {  
    public:  
        char *_pstr;  
        int _size;  
        explicit CxString(int size)  
        {  
            _size = size;  
            // 代码同上, 省略...  
        }  
        CxString(const char *p)  
        {  
            // 代码同上, 省略...  
        }  
    };  
      
        // 下面是调用:  
      
        CxString string1(24);     // 这样是OK的  
        CxString string2 = 10;    // 这样是不行的, 因为explicit关键字取消了隐式转换  
        CxString string3;         // 这样是不行的, 因为没有默认构造函数  
        CxString string4("aaaa"); // 这样是OK的  
        CxString string5 = "bbb"; // 这样也是OK的, 调用的是CxString(const char *p)  
        CxString string6 = 'c';   // 这样是不行的, 其实调用的是CxString(int size), 且size等于'c'的ascii码, 但explicit关键字取消了隐式转换  
        string1 = 2;              // 这样也是不行的, 因为取消了隐式转换  
        string2 = 3;              // 这样也是不行的, 因为取消了隐式转换  
        string3 = string1;        // 这样也是不行的, 因为取消了隐式转换, 除非类实现操作符"="的重载  

     explicit关键字的作用就是防止类构造函数的隐式自动转换.

    上面也已经说过了, explicit关键字只对有一个参数的类构造函数有效, 如果类构造函数参数大于或等于两个时, 是不会产生隐式转换的, 所以explicit关键字也就无效了. 
    例如: 

    class CxString  // explicit关键字在类构造函数参数大于或等于两个时无效  
    {  
    public:  
        char *_pstr;  
        int _age;  
        int _size;  
        explicit CxString(int age, int size)  
        {  
            _age = age;  
            _size = size;  
            // 代码同上, 省略...  
        }  
        CxString(const char *p)  
        {  
            // 代码同上, 省略...  
        }  
    };  
      
        // 这个时候有没有explicit关键字都是一样的  

    但是, 也有一个例外, 就是当除了第一个参数以外的其他参数都有默认值的时候, explicit关键字依然有效, 此时, 当调用构造函数时只传入一个参数, 等效于只有一个参数的类构造函数, 例子如下:

    class CxString  // 使用关键字explicit声明  
    {  
    public:  
        int _age;  
        int _size;  
        explicit CxString(int age, int size = 0)  
        {  
            _age = age;  
            _size = size;  
            // 代码同上, 省略...  
        }  
        CxString(const char *p)  
        {  
            // 代码同上, 省略...  
        }  
    };  
      
        // 下面是调用:  
      
        CxString string1(24);     // 这样是OK的  
        CxString string2 = 10;    // 这样是不行的, 因为explicit关键字取消了隐式转换  
        CxString string3;         // 这样是不行的, 因为没有默认构造函数  
        string1 = 2;              // 这样也是不行的, 因为取消了隐式转换  
        string2 = 3;              // 这样也是不行的, 因为取消了隐式转换  
        string3 = string1;        // 这样也是不行的, 因为取消了隐式转换, 除非类实现操作符"="的重载  

     

     

     

    展开全文
  • 1、快速搜索在目录下面的含有关键字的文件 我们采用下面命令 cd directories grep -r 关键字 2、搜索结果

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程  

     

    1、快速搜索在目录下面的含有关键字的文件

    我们采用下面命令
     
    cd directories
    
    grep -r  关键字
    

     

    2、搜索结果

    展开全文
  • Java中this关键字的详解

    万次阅读 多人点赞 2018-07-20 21:45:32
    在java的学习中,当接触到类这一章的时候,就会避免不了的接触到this关键字。 首先,this关键字指向的是当前对象的引用 作用: this.属性名称 指的是访问类中的成员变量,用来区分成员变量和局部变量(重名...

    在java的学习中,当接触到类这一章的时候,就会避免不了的接触到this关键字。

    首先,this关键字指向的是当前对象的引用

    作用:

                 this.属性名称                

                       指的是访问类中的成员变量,用来区分成员变量和局部变量(重名问题)

                  

    class Test_08{
    	public static void main(String [] args){
    		//调用无参构造函数,
    		Person p1 = new Person();
    		p1.setAge(20);
    		p1.setName("张三");
    		p1.setGender("男");
    		System.out.println(""+p1.getName()+" 今年"+p1.getAge()+"岁 性别为:"+p1.getGender());
    	}
    	
    }
    class Person{
    	private String name;
    	private int age;
    	private String gender;
    	Person(){}
    	Person(String name,int age,String gender){
    		this.name = name;
    		this.age = age;
    		this.gender = gender;
    	}
    	public void setName(String name){
    		name = name;
    	}
    	public String getName(){
    		return name;
    	}
    	public void setAge(int age){
    		age = age;
    	}
    	public int getAge(){
    		return age;
    	}
    	public void setGender(String gender){
    		gender = gender;
    	}
    	public String getGender(){
    		return gender;
    	}
    }

     

    对Test_08运行后发现,调用的set方法并没有对 对象中的变量进行赋值,是因为,传入的参数变量名与类中属性变量名重复,因此我们在set方法和有参构造方法中加上了this.类属性名称,这样就可以完成对 对象变量的赋值。如下图:

                 this.方法名称              

                                    用来访问本类的成员方法

                  this();                              

                                                        访问本类的构造方法

                                                        ()中可以有参数的 如果有参数 就是调用指定的有参构造
               注意事项:
                                1.this() 不能使用在普通方法中 只能写在构造方法中
                                2.必须是构造方法中的第一条语句

    例如,当我们把this()放在有参构造函数的末尾时,例如用this("哈哈");我们先不管语法是否有错误,试着按照程序的运行来判断一下结果,我们可以看出,当在创建对象时,假定调用含有this(“哈哈”)的构造函数,则刚开始存放的值,会被this(“哈哈”)调用的只含有一个参数的构造函数覆盖,也就是说,最后的name会变成“哈哈”,这是与我们的初衷相违背的,而且运行结果也是报错,

    当我们换到构造方法的第一句时,则不会有这种错误,因为它并不会影响到后面name的赋值。

     

     

    我们接下来把this语句放在构造函数的第一句位置,

    就不会有报错

     

    我的个人公众号:

    憨憨的快乐生活

    想要学习和了解更多java相关知识,可以关注一下

    展开全文
  • Python 关键字

    万次阅读 多人点赞 2017-03-30 15:28:47
    关键字是预先保留的标识符,每个关键字都有特殊的含义。编程语言众多,但每种语言都有相应的关键字,Python 也不例外,它自带了一个 keyword 模块,用于检测关键字

    简述

    关键字是预先保留的标识符,每个关键字都有特殊的含义。编程语言众多,但每种语言都有相应的关键字,Python 也不例外,它自带了一个 keyword 模块,用于检测关键字。

    | 版权声明:一去、二三里,未经博主允许不得转载。

    关键字列表

    要获取关键字列表,可以使用内置函数 help()

    >>> help('keywords')
    
    Here is a list of the Python keywords.  Enter any keyword to get more help.
    
    False               class               from                or
    None                continue            global              pass
    True                def                 if                  raise
    and                 del                 import              return
    as                  elif                in                  try
    assert              else                is                  while
    async               except              lambda              with
    await               finally             nonlocal            yield
    break               for                 not
    

    也可以使用 keyword 模块

    >>> import keyword
    >>> keyword.kwlist
    ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
    

    共 33 个关键字,除 TrueFalseNone 外,其他关键字均为小写形式。

    注意: Python 是一种动态语言,根据时间在不断变化,关键字列表将来有可能会更改。

    关键字判断

    除此之外,keyword 模块还提供了关键字的判断功能:

    >>> keyword.iskeyword('and')
    True
    >>> keyword.iskeyword('has')
    False
    

    如果是关键字,返回 True;否则,返回 False

    关键字含义

    下表列举了所有的 Python 关键字,以及它们的的含义:

    关键字 含义
    False 布尔类型的值,表示假,与 True 相反
    None None 比较特殊,表示什么也没有,它有自己的数据类型 - NoneType
    True 布尔类型的值,表示真,与 False 相反
    and 用于表达式运算,逻辑与操作
    as 用于类型转换
    assert 断言,用于判断变量或者条件表达式的值是否为真
    break 中断循环语句的执行
    class 用于定义类
    continue 跳出本次循环,继续执行下一次循环
    def 用于定义函数或方法
    del 删除变量或序列的值
    elif 条件语句,与 ifelse 结合使用
    else 条件语句,与 ifelif 结合使用。也可用于异常和循环语句
    except except 包含捕获异常后的操作代码块,与 tryfinally 结合使用
    finally 用于异常语句,出现异常后,始终要执行 finally 包含的代码块。与 tryexcept 结合使用
    for for 循环语句
    from 用于导入模块,与 import 结合使用
    global 定义全局变量
    if 条件语句,与 elseelif 结合使用
    import 用于导入模块,与 from 结合使用
    in 判断变量是否在序列中
    is 判断变量是否为某个类的实例
    lambda 定义匿名函数
    nonlocal 用于标识外部作用域的变量
    not 用于表达式运算,逻辑非操作
    or 用于表达式运算,逻辑或操作
    pass 空的类、方法或函数的占位符
    raise 异常抛出操作
    return 用于从函数返回计算结果
    try try 包含可能会出现异常的语句,与 exceptfinally 结合使用
    while while 循环语句
    with 简化 Python 的语句
    yield 用于从函数依次返回值
    展开全文
  • *关键字(*关键字(*关键字(*关键字(*关键字(*关键字(*关键字(*关键字(*关键字(*关键字(*关键字(*关键字(*关键字(*关键字(*关键字(*关键字(*关键字(*关键字(*关键字(*关键字(*关键字
  • 面试|static 关键字有什么作用

    万次阅读 多人点赞 2019-06-16 12:43:01
    今天主要学习下Java语言中的static关键字。 static关键字的含义及使用场景 static是Java50个关键字之一。static关键字可以用来修饰代码块表示静态代码块,修饰成员变量表示全局静态成员变量,修饰方法表示静态方法...
  • volatile 关键字

    万次阅读 2021-03-11 13:12:55
    volatile是干啥用的,有什么含义和特点呢? 当一个共享变量被...使用volatile关键字,当线程2对变量stop修改时,会强制将所有用到stop变量的线程对应的缓存中stop的缓存行置为无效。 由于线程1的stop缓存行无效
  • C语言关键字解析

    万次阅读 多人点赞 2018-09-09 01:34:52
    在C语言中有32个关键字,如下表所示: 释: (1)声明: 1)告诉编译器,这个名字已经匹配到一块内存上; 2)告诉编译器,这个名字已经预定了,其他地方再也不能用它来作为变量名或对象名。 (2)定义: ...
  • MySQL关键字,主关键字,候选关键字

    千次阅读 2016-09-22 23:20:28
    二维表中,能够惟一确定记录的一个字段或几个字段的组合被称为“超关键字”。“超关键字”虽然能唯一确定记 录,但是它所包含的字段可能是有多余的。  如果一个超关键字去掉其中任何一个字段后不再能唯一地确定...
  • final关键字

    2019-10-11 11:37:30
    final关键字 final关键字修饰类 final关键字修饰的类不能被继承; final关键字修饰方法 final关键字修饰的方法不能被重写; final关键字修饰变量 final关键字修饰的变量是常量:只能赋值一次; ...
  • 1、在整个pcap文件中,搜索linux关键字–frame contains “linux” 2、搜索linux关键字的时候,基于DNS协议 要基于协议来搜索关键字,我们首先要知道该字段在协议的哪个位置。 如下图,DNS的queries下的name字段,...
  • rust 关键字

    2020-04-18 10:35:12
    rust 关键字1,rust 关键字 1,rust 关键字 变量 let 可变变量 let mut 常量 const 参考: Rust 程序设计语言
  • java8中的default关键字

    万次阅读 多人点赞 2018-05-05 09:56:29
    在学习集合代码时发现在Iterable接口中使用了default关键字。 default关键字介绍 default是在java8中引入的关键字,也可称为Virtual extension methods——虚拟扩展方法。是指,在接口内部包含了一些默认的...
  • this关键字

    万次阅读 多人点赞 2019-03-20 12:39:33
    一、this关键字的意义 1、代表当前对象 2、this就是所在函数所属对象的引用,简单来说,哪个对象调用了this所在的函数,this就代表哪个对象 3、如下图,this代表的就是对象p,如右边内存图解,this会通过堆内存中...
  • Java关键字

    千次阅读 2020-12-14 18:29:42
    Java关键字Java关键字数据类型关键字流程控制型关键字finally修饰符型关键字1.public/protected/private2.static3.final4.transient5.synchronized6.volatile动作行为型关键字throw/throws保留字 Java关键字 Java ...
  • this关键字与super关键字详解

    万次阅读 多人点赞 2018-02-02 12:17:03
    一.this关键字 1.实例一: (1)需求:使用Java类描述一个动物; (2)实例: class Animal{ String name; //成员变量 String color; public Animal(String n,String c){ name = n; color = c; } ...
  • volatile关键字的作用

    万次阅读 多人点赞 2019-06-09 23:46:30
    volatile关键字的作用
  • linux:根据关键字或日期查找日志

    万次阅读 多人点赞 2018-08-01 18:02:40
    Q:Linux命令,根据关键字查询日志 A:1.单个文件可以使用vi或vim编辑器打开日志文件,使用编辑器里的查找功能。在查看模式下,符号/后面跟关键字向下查找,符号?后面跟关键字向上查找,按n查找下一个,按N查找上一个...
  • 注意:一个函数的返回值类型 是void,那么也可以出现return关键字,但是return关键字的后面不能有数据。 此时return表示结束程序的运行 break、continue与return的区别: break关键字是结束整个循环。 ...
  • 关键字、主关键字、候选关键字

    万次阅读 2014-09-10 14:20:42
    如果某个字段或多个字段的值可以唯一地标识一条记录,则该字段或字段组就称为关键字。 如果一个关键字是用以标识每条记录的唯一性,并作为该表与其他表实现关联之用,则称其为主关键字或主码。 除主关键字以外的其他...
  • Kotlin关键字

    千次阅读 2017-05-24 15:17:19
    Kotlin关键字
  • Java中super关键字、super关键字与this关键字的区别

    千次阅读 多人点赞 2018-10-21 16:31:33
    文章目录1 super关键字1.1 super用于方法1.1.1 用于构造方法1.1.2 用于普通方法1.1.2 用于属性2 super与this关键字的区别2.1 概念上2.2 查找范围2.3 特殊之处 1 super关键字 1.1 super用于方法 1.1.1 用于构造...
  • 理解final关键字

    万次阅读 多人点赞 2018-08-07 22:24:12
    final在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误。 一....
  • Java关键字(Java 8版本)

    万次阅读 多人点赞 2019-09-28 22:11:04
    被Java语言赋予了特殊含义,用作专门用途的字符串(单词),这些关键字不能用于常量、变量、和任何标识符的名称。 Java关键字(Java 8版本) Java关键字(Java 8 以后版本) 注意事项 true,false和,null看起来...
  • java关键字 boolean 变量只能以 true 或 false 作为值。boolean 不能与数字类型相互转换。 包含 boolean 操作数的表达式只能包含 boolean 操作数。 Boolean 类是 boolean 原始类型的包装对象类 ...
  • synchronized关键字和volatile关键字比较 volatile关键字是线程同步的轻量级实现,所以volatile性能肯定比synchronized关键字要好。但是volatile关键字只能用于变量而synchronized关键字可以修饰方法以及代码块。...
  • C语言关键字

    千次阅读 多人点赞 2016-12-26 21:12:46
    由美国国家标准协会(ANSI)定义的C语言关键字共有32个 关键字已被C语言使用,不能作为其他用途使用 根据关键字的用途,可以将其分为两大类:流程控制关键字和数据类型关键字 一、流程控制关键字 1、循环结构 for:...
  • voliate关键字

    万次阅读 2019-06-25 09:31:02
    在上一篇文章中我们深入理解了java关键字synchronized,我们知道在java中还有一大神器就是关键volatile,可以说是和synchronized各领风骚,其中奥妙,我们来共同探讨下. 通过上一篇的文章我们了解到synchronized是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,936,846
精华内容 774,738
关键字:

关键字