认识 C++ 中的 explicit 关键字
c++中 explicit关键字的含义和用法
上面的所有的操作即是所谓的"隐式转换".
如果要避免这种自动转换的功能,我们该怎么做呢?嘿嘿这就是关键字explicit的作用了,将类的构造函数声明为"显示",也就是在声明构造函数的时候 前面添加上explicit即可,这样就可以防止这种自动的转换操作,如果我们修改上面的MyClass类的构造函数为显示的,那么下面的代码就不能够编 译通过了,如下所示:
{
public:
MyClass( int num );
}
....
MyClass obj = 10; //ok,convert int to MyClass
在上面的代码中编译器自动将整型转换为MyClass类对象,实际上等同于下面的操作:
MyClass temp(10);
MyClass obj = temp;
Sales_item& operator+(const Sales_item &lhs,const Sales_item rhs){if(!lhs.same_isbn(rhs)) throw isbn_mismatch("isbn missmatch",lhs.book(),rhs.book());Sales_item ret(lhs);ret+rhs;return ret;}
The implicit type conversion of const char * to a string object enables its users to write the following:string s;s = "Hello";The compiler implicitly transforms this intostring s;//pseudo C++ code:s = string ("Hello"); //create a temporary and assign it to sOn the other hand, if you declare this constructor explicit, you have to use explicit type conversion:class string{//...public:explicit string(const char *);};int main(){string s;s = string("Hello"); //explicit conversion now requiredreturn 0;}Extensive amounts of legacy C++ code rely on the implicit conversion of constructors. The C++ Standardizationcommittee was aware of that. In order to not make existing code break, the implicit conversion was retained. However, anew keyword, explicit, was introduced to the languageto enable the programmer to block the implicit conversionwhen it is undesirable. As a rule, a constructor that can be invoked with a single argument needs to be declaredexplicit. When the implicit type conversion is intentional and well behaved, the constructor can be used as animplicit conversion operator.
explicit 用法
explicit 用法explicit关键字作用:禁止隐式调用类的单参数的构造函数。
上述实际上由两种情形:1. 禁止隐式调用拷贝构造函数2. 禁止类对象之间的隐式转换。
类对象间的隐式转换:利用一个已经存在的其他类型的对象来创建本类的新对象,且不显示调用本类的构造函数。
案例:#include <iostream>using namespace std;class A{public:A(){num = 9000;}A(int n){this->num = n;}A(const A&a){num = a.num;}friend void show(const A&);private:int num;};void show(const A& a){cout << "a.num = "<< a.num << endl;}int main(){// 隐式调用类A的单参的构造器cout << "Hello world!" << endl;A a1 = 5000;//调用隐式转换构造器A a2 = a1;//调用隐式拷贝构造器show(a1);show(a2);show(6000);return 0;}上述隐式调用C++语法是允许的,但很多人对这种表示方式不习惯,觉得程序的可读性较差。
为了禁止对类的单参数构造器的隐式调用,C++引入关键字explicit。
在类的定义中,在任何一个单参数构造器前加explicit,即可以禁止对该构造器的隐式调用。
案例:#include <iostream>using namespace std;class A{public:A(){num = 0;}explicit A(int n){this->num = n;}explicit A(const A& a){num = a.num;}friend void show(const A&);private:int num;};void show(const A& a){cout << " variable:" << a.num << endl;}int main(){//cout << "Hello world!" << endl;A a1(32);A a2(a1);show(a1);show(a2);show(A(6000));return 0;}这样程序既可以正常运行,并具有更好的可读性。
c语言的32个关键字及其含义
c语言的32个关键字及其含义C语言是一门广泛应用于计算机编程的高级编程语言,其简洁、高效的特点使之成为许多程序员的首选。
而C语言的关键字则是构成C语言语法结构的基石,掌握这些关键字的含义对于编写高质量的C代码至关重要。
本文将会介绍C语言的32个关键字及其含义。
一、自动变量(auto)auto关键字用于声明自动变量,自动变量是在代码块中定义的变量。
它们的生命周期仅限于所在代码块,函数的参数也属于自动变量。
二、断言(assert)assert关键字用于在程序运行时进行断言验证,如果断言条件为假,程序将会中止执行。
断言通常用于调试和排错。
三、带宽限定(band)band关键字用于限定带宽,常用于定义延迟函数、外部中断和总线访问等场景。
四、布尔类型(bool)bool关键字用于声明布尔类型的变量,布尔类型只有两个值:真和假。
一般用于判断语句和循环语句的条件。
五、跳过(break)break关键字用于跳出循环或者switch语句块,提前终止程序的执行。
六、函数调用(call)call关键字用于向函数传递参数并调用函数。
它与return关键字相对应,后者用于从函数返回结果。
七、case标签(case)case关键字用于定义switch语句中不同分支的标签,根据不同的条件执行相应的代码。
八、常量(const)const关键字用于声明常量,常量值在程序执行期间不可更改。
通常用于定义不变的特定值,提高代码的可读性和可维护性。
九、continue(continue)continue关键字用于结束当前循环的当前迭代,并进入下一轮循环的迭代。
通常用于跳过某些不满足条件的循环迭代。
十、默认(default)default关键字用于定义switch语句中默认分支的代码块。
如果没有匹配的case 标签,将会执行默认分支的代码。
十一、定义(define)define关键字用于定义宏。
宏是一种在程序编译之前被展开的符号常量或者代码片段。
c 中 explicit关键字的含义和用法
c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class MyClass{public:MyClass( int num );}....MyClass obj = 10; //ok,convert int to MyClass在上面的代码中编译器自动将整型转换为MyClass类对象,实际上等同于下面的操作:MyClass temp(10);MyClass obj = temp;上面的所有的操作即是所谓的"隐式转换".如果要避免这种自动转换的功能,我们该怎么做呢?嘿嘿这就是关键字explicit的作用了,将类的构造函数声明为"显示",也就是在声明构造函数的时候前面添加上explicit即可,这样就可以防止这种自动的转换操作,如果我们修改上面的MyClass类的构造函数为显示的,那么下面的代码就不能够编译通过了,如下所示:class MyClass{public:explicit MyClass( int num );}....MyClass obj = 10; //err,can‘t non-explict convertclass isbn_mismatch:public std::logic_error{public:explicit isbn_missmatch(const std::string &s):std:logic_error(s){}isbn_mismatch(const std::string &s,const std::string &lhs,const std::string &rhs):std::logic_error(s),left(lhs),right(rhs){}const std::string left,right;virtual ~isbn_mismatch() throw(){}};Sales_item& operator+(const Sales_item &lhs,const Sales_item rhs){if(!lhs.same_isbn(rhs)) throw isbn_mismatch("isbn missmatch",lhs.book(),rhs.book());Sales_item ret(lhs);ret+rhs;return ret;}Sales_item item1,item2,sum;while(cinitem1item2){try{ sun=item1+item2;}catch(constisbn_mismatch &e){ cerre.what()"left isbn is:"e.left"right isbn is:"e.rightendl;}}用于用户自定义类型的构造函数,指定它是默认的构造函数,不可用于转换构造函数。
构造函数explicit
构造函数explicit在C++中,构造函数是一种特殊的成员函数,用于初始化类的对象。
通常情况下,我们可以使用默认构造函数来创建对象,但有时我们可能需要限制隐式构造函数的使用,以避免不必要的对象创建。
这就是explicit构造函数的作用。
explicit构造函数是一种修饰符,用于限制隐式类型转换的发生。
它只能用于带有一个参数的构造函数,用于明确告诉编译器不要进行隐式类型转换。
为了更好地理解explicit构造函数的用途和工作原理,下面我将探讨其概念、用法和适用场景。
概念:explicit构造函数是在构造函数声明前加上explicit关键字的构造函数。
这样的构造函数只能用于显式创建对象,不能用于隐式类型转换。
当我们将一个值传递给通过explicit修饰的构造函数时,编译器不会进行自动类型转换。
用法:下面是一个使用explicit构造函数的例子:```class MyClasspublic:explicit MyClass(int value) : m_value(value) {}int m_value;};```在这个例子中,我们定义了一个类MyClass,它有一个带有int参数的构造函数。
通过在构造函数前加上explicit关键字,我们明确告诉编译器不要进行隐式类型转换。
这意味着我们只能使用显式的方式来创建MyClass的对象,例如:```MyClass obj = MyClass(10); // 显式创建对象MyClass obj2 = 10; // 隐式创建对象,编译错误```适用场景:使用explicit构造函数有以下几个典型的应用场景:1. 避免不必要的隐式类型转换:有时候,我们可能不希望一些类型的对象能够被隐式地转换成其他类型的对象。
通过使用explicit构造函数,我们可以明确告诉编译器不进行隐式类型转换,从而增加代码的可读性和安全性。
```class Stringexplicit String(int size) : m_size(size) {}private:int m_size;};void printString(const String& str)std::cout << str << std::endl;int maiprintString(10); // 隐式类型转换,编译错误printString(String(10)); // 显式创建对象return 0;```2. 避免二义性问题:有时候,如果一个类有多个构造函数,且参数类型相似,编译器可能无法确定应该调用哪个构造函数。
c语言32个关键字详解
c语言32个关键字详解auto: auto关键字是c语言中用来声明局部变量的修饰符,它能够使程序员在一个函数的内部定义一个局部变量。
auto关键字的作用是使得这个局部变量在函数返回后不会消失,而是可以在函数的外部继续存在。
break: break关键字用于强制跳出循环,它可以用于while,do while或者for循环。
当它出现在循环内部时,循环立即终止,并且控制流程将会跳转到循环外部。
case: case关键字可以用来创建一个条件分支,并且它必须出现在switch语句中。
它可以使得程序不必以多重if语句来处理多重分支问题。
char: char关键字用来指定字符变量,它可以表示一个字符或者一个小整数,一般8位字节足以存放一个字符。
const: const关键字用来定义常量,它之后的变量不能被修改,一旦定义的常量将一直保存在程序的整个执行过程中。
continue: continue关键字用来结束当前迭代循环,并且进入下一次迭代循环。
当它出现在循环内部时,当前的循环将会立即终止,控制流程将会继续到循环的下一个迭代中。
default: default关键字用来指定switch中的默认case语句,当没有任何case匹配成功时,将会执行default后面的语句。
do: do关键字用来声明一个do-while循环,do-while循环通常用来保证在程序中某个条件至少被执行一次,它的基本形式为“do{}while()”,执行流程大致如下:首先执行do后面的语句,然后判断while后面的条件是否满足,如果满足,则继续执行do后面的语句,直到while条件不成立。
double: double关键字用来指定双精度浮点类型的变量,它能够表示一个比较大的数字,一般来说8个字节存储就足够了。
else: else关键字用来指定if语句的反条件分支,即当if检查的条件不满足时,会执行else后面的语句。
enum: enum关键字用来指定一组枚举类型的常量,它可以使枚举的常量有规律的递增或者递减,常用于建立某一种特定事物的有限集合。
c++中explicit的用法
C++中explicit的用法1. 介绍在C++编程中,explicit是一个关键字,用于修饰构造函数。
它的作用是禁止编译器执行自动类型转换,以避免意外的类型转换造成的不确定性和错误。
在本文中,将对explicit的用法进行详细介绍,并举例说明其在实际编程中的应用。
2. explicit的基本概念在C++中,当一个构造函数只接受一个参数时,它实际上定义了一个从该参数类型到类类型的隐式类型转换。
这种隐式类型转换可能会导致一些潜在的问题,比如不期望的类型转换或者不明确的代码逻辑。
为了解决这些问题,C++11引入了explicit关键字,用于显式声明构造函数为显式构造函数,从而禁止编译器执行隐式类型转换。
3. explicit的使用方法在类的构造函数声明前加上explicit关键字,即可将该构造函数声明为显式构造函数。
例如:```cppclass Test {public:explicit Test(int value) : m_value(value) {}private:int m_value;};```在上面的例子中,Test类的构造函数接受一个int类型的参数,但加上了explicit关键字,表示该构造函数为显式构造函数,禁止编译器执行隐式类型转换。
4. 显式构造函数的优势通过使用explicit关键字声明构造函数,我们可以有效地避免一些潜在的问题,例如:- 避免意外的类型转换:对于只接受一个参数的构造函数,如果不使用explicit关键字,那么它将成为隐式类型转换的候选函数,这可能导致意外的类型转换,从而产生错误的结果。
- 明确代码逻辑:显式构造函数可以使代码的逻辑更加明确,使得代码阅读和维护更加容易。
5. 显式构造函数的应用场景显式构造函数通常适用于以下情况:- 构造函数只接受一个参数,并且该参数不能被隐式转换为类的类型。
- 需要避免意外的类型转换和提高代码的可读性。
6. 总结在C++编程中,显式构造函数是一个非常有用的特性,它可以有效地避免一些潜在的问题,提高代码的可靠性和可维护性。
explicit,implicit,operator 重载运算符
注意:
转换运算符将源类型转换为目标类型。源类型提供转换运算符。与隐式转换不同,必须通过强制转换的方式来调用显式转换运算符。如果转换操作可能导致异常或丢失信息,则应将其标记为 explicit。这可以防止编译器无提示地调用可能产生无法预见后果的转换操作。
conv-typ种形式声明了用户定义的重载内置运算符的运算符。并非所有内置运算符都可以被重载(请参见可重载的运算符)。op-type 和 op-type2 中至少有一个必须是封闭类型(即运算符所属的类型,或理解为自定义的类型)。例如,这将防止重定义整数加法运算符。
后两种形式声明了转换运算符。conv-type-in 和 conv-type-out 中正好有一个必须是封闭类型(即,转换运算符只能从它的封闭类型转换为其他某个类型,或从其他某个类型转换为它的封闭类型)。
运算符只能采用值参数,不能采用 ref 或 out 参数。
C# 要求成对重载比较运算符。如果重载了==,则也必须重载!=,否则产生编译错误。同时,比较运算符必须返回bool类型的值,这是与其他算术运算符的根本区别。
public static explicit operator conv-type-out ( conv-type-in operand )
参数:
result-type 运算符的结果类型。
unary-operator 下列运算符之一:+ - ! ~ ++ — true false
op-type 第一个(或唯一一个)参数的类型。
explicit 关键字用于声明必须使用强制转换来调用的用户定义的类型转换运算符。
implicit 关键字用于声明隐式的用户定义类型转换运算符。如果转换过程可以确保不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换。
C语言32个关键字读音及意义
序号关键字音标意义1 auto 声明自动变量,缺省时编译器一般默认为auto2 int [int] 声明整型变量3 double 声明双精度变量4 long 声明长整型变量5 char 声明字符型变量6 float 声明浮点型变量7 short 声明短整型变量8 signed 声明有符号类型变量9 unsigned 声明无符号类型变量10 struct 声明结构体变量11 union 声明联合数据类型12 enum 声明枚举类型13 static 声明静态变量14 switch 用于开关语句15 case 开关语句分支16 default 开关语句中的“其他”分支17 break 跳出当前循环18 register 声明寄存器变量19 const constant['kɑnstənt] 声明只读变量 const是constant的缩写形式20 volatile 说明变量在程序执行中可被隐含地改变21 typedef [taip] [def] 用以给数据类型取别名(当然还有其他作用)22 extern 声明变量是在其他文件正声明(也可以看做是引用变量)23 return 子程序返回语句(可以带参数,也可不带参数)24 void 声明函数无返回值或无参数,声明空类型指针25 continue 结束当前循环,开始下一轮循环26 do 循环语句的循环体27 while 循环语句的循环条件28 if 条件语句29 else 条件语句否定分支(与if 连用)30 for 一种循环语句(可意会不可言传)31 goto 无条件跳转语句32 sizeof 计算对象所占内存空间大小。
c语言合法关键字的定义
c语言合法关键字的定义C语言是一种广泛使用的编程语言,它具有丰富的关键字来定义和描述程序的结构、语义和行为。
本文将详细介绍C语言的合法关键字定义,并逐步解释这些关键字的用途和特性。
首先,我们需要了解什么是关键字。
关键字是编程语言中具有特定含义和用途的保留字,它们不能作为标识符使用,并且用来定义特定的语法和语义规则。
在C语言中,关键字是预先定义的,不能重新定义或修改它们的含义。
C语言的关键字总共有32个。
它们是:auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、int、long、register、return、short、signed、sizeof、static、struct、switch、typedef、union、unsigned、void、volatile、while。
接下来,我们将以这些关键字为主题,一步一步回答这个问题。
1. auto:auto关键字用于声明自动变量,即函数内定义的局部变量。
自动变量在函数调用结束后会被销毁。
2. break:break关键字用于在循环语句(如for、while和do-while)中提前终止循环,并跳出循环体。
3. case:case关键字用于在switch语句中定义每个分支的标签,用于匹配不同的条件。
4. char:char关键字用于声明字符类型的变量。
字符类型变量存储单个字符的ASCII码值。
5. const:const关键字用于声明常量。
常量的值在程序运行期间不可修改。
6. continue:continue关键字用于终止当前迭代,并开始下一次迭代。
7. default:default关键字用于在switch语句中定义默认情况下的分支。
8. do:do关键字用于定义do-while循环,即先执行循环体再判断条件。
9. double:double关键字用于声明双精度浮点类型的变量。
C语言32个关键字详解
C语言中32个关键字详解由ANSI标准定义的C语言关键字共32个:auto double int struct break else long switchcase enum register typedef char extern return unionconst float short unsigned continue for signed voiddefault goto sizeof volatile do if while static根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两大类。
1数据类型关键字A基本数据类型(5个)void:声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果char:字符型类型数据,属于整型数据的一种int:整型数据,通常为编译器指定的机器字长float:单精度浮点型数据,属于浮点数据的一种double:双精度浮点型数据,属于浮点数据的一种B类型修饰关键字(4个)short:修饰int,短整型数据,可省略被修饰的int。
long:修饰int,长整形数据,可省略被修饰的int。
signed:修饰整型数据,有符号数据类型unsigned:修饰整型数据,无符号数据类型C复杂类型关键字(5个)struct:结构体声明union:共用体声明enum:枚举声明typedef:声明类型别名sizeof:得到特定类型或特定类型变量的大小D存储级别关键字(6个)auto:指定为自动变量,由编译器自动分配及释放。
通常在栈上分配static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部register:指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数extern:指定对应变量为外部变量,即在另外的目标文件中定义,可以认为是约定由另外文件声明的韵蟮囊桓觥耙谩?const:与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变)volatile:与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值2流程控制关键字A跳转结构(4个)return:用在函数体中,返回特定值(或者是void值,即不返回值)continue:结束当前循环,开始下一轮循环break:跳出当前循环或switch结构goto:无条件跳转语句B分支结构(5个)if:条件语句else:条件语句否定分支(与if连用)switch:开关语句(多重分支语句)case:开关语句中的分支标记default:开关语句中的“其他”分治,可选。
c语言的37个关键字及其含义
c语言的37个关键字及其含义C语言是一种广泛使用的编程语言,拥有许多关键字,这些关键字在程序中具有特殊的用途和含义。
下面是C语言的37个关键字及其含义:1. auto:用于声明自动存储类别的局部变量。
2. break:在循环或switch语句中,用于跳出当前循环或switch分支。
3. case:在switch语句中,用于标识不同的选择分支。
4. char:用于声明字符类型的变量或函数。
5. const:用于声明常量,其值不能被修改。
6. continue:用于跳过当前循环迭代,转到下一次迭代。
7. default:在switch语句中,用于定义默认情况的代码块。
8. do:用于创建一个执行语句块直到满足特定条件的循环。
9. double:用于声明双精度浮点数类型的变量或函数。
10. else:在if语句中,用于定义条件不为真时执行的代码块。
11. enum:用于声明枚举类型和枚举常量。
12. extern:用于声明变量或函数是在其他文件或模块中定义的。
13. float:用于声明单精度浮点数类型的变量或函数。
14. for:用于创建一个循环,指定初始条件、循环条件和循环迭代。
15. goto:用于无条件地转移到程序中的标记语句。
16. if:用于执行条件语句块,如果条件为真,则执行代码块。
17. int:用于声明整数类型的变量或函数。
18. long:用于声明长整数类型的变量或函数。
19. register:用于声明寄存器存储类别的局部变量。
20. return:用于从函数中返回值。
21. short:用于声明短整数类型的变量或函数。
22. signed:用于声明有符号数类型的变量或函数。
23. sizeof:用于获取数据类型或变量的大小。
24. static:用于声明静态存储类别的局部变量。
25. struct:用于声明结构体类型和结构体变量。
26. switch:用于多个选择分支的条件语句。
C语言中的32个关键字及其意思
由ANSI标准定义的C语言关键字共32个 :auto double int struct break else long switchcase enum register typedef char extern return unionconst float short unsigned continue for signed voiddefault goto sizeof volatile do if while static一、数据类型关键字(12个):1、char [tʃɑ:]:声明字符型变量或函数(1)主要内容字符:容纳单字符的一种基本数据类型;(2)n.炭;女清洁工 vt.烧焦;(3)字符类型:字符型(Char) c、字符串型(String) s 、二进制型(Binary) bn、布尔型(Boolean) b 、日期时间型(DateTime) d 、数组型(Array) a、象型(Object) o 、循环控制变量通常使用单一的字符;2、double [ˈdʌbəl] :声明双精度变量或函数(1)n. 两倍;(2)a. 两倍的,双重的;(3)v. 加倍的,快步走,加倍努力3、enum :声明枚举类型(1)枚举:枚举是一个被命名的整型常数的;(2)枚举类型;(3)列举型;(4)列举enumerate [iˈnju:məreit]4、float [fləut] :声明浮点型变量或函数(1)浮点数、(2)浮点型、(3)漂浮、(4)浮动5、int[int]:声明整型变量或函数(1)符号整数、(2)取整、(3)Int是 integer ['intidʒə] 的简写int 声明一个变量为整型。
占2个字节,最大表示范围:-32768到32767(十进制)。
long 声明一个变量为长整型。
长整型变量占4个字节,最大表示范围:-48(十进制)到47(十进制)。
6、long [lɔŋ] :声明长整型变量或函数(1)长整型(2)a./ ad.长(期)的(地)(3) n.长时间(4)vi.渴望7、short [ʃɔ:t] :声明短整型变量或函数(1)a. 短的,矮的、(2)n. 短裤、(3)adv. 短暂地;突然地,急地8、signed:声明有符号类型变量或函数(1)有符号的、(2)带正负号、(3)sign [sain] n.标记,符号;招牌;迹象 v.签(署)9、struct:声明结构体变量或函数(1)n.结构(2)结构体(4)创建构架数组(3)structural[ˈstrʌktʃərəl]a.结构的10、union [ˈju:niən]:声明共用体(联合)数据类型(1)联合、(2)n.工会,联盟、(3)合并、(4)团结11、unsigned [ʌn'saind]:声明无符号类型变量或函数(1)无符号的(1)无符号的12、void [vɔid] :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)(1)a.无效的、(2)没有的、(3)vt.使无效、(4)n.空虚感二、控制语句关键字(12个):A循环语句1、for [fə, fɔ:]:一种循环语句(可意会不可言传)2、do [du, du:] :循环语句的循环体3、while [wail] :循环语句的循环条件(1)conj.当…的时;(2)而;(3)虽然 n.一会儿 vt.消磨4、break [breik]:跳出当前循环(1)中断、(2)断开、(3)n.休息 vt.打破5、 continue[kənˈtinju:]:结束当前循环,开始下一轮循环(1)v.继续,延续,延伸B条件语句1、if [if]: 条件语句(1)条件函数、(2)conj.如果,假如、(3)是否、(4)即使、(5)无论何时2、else [els] :条件语句否定分支(与 if 连用)(1)a. 别的(2)ad. 其他,另外3、default [diˈfɔ:lt]:开关语句中的“其他”分支(1)预设、(2)n. 假设值,默认(值),不履行责任,缺席(3)v. 默认,不履行义务,缺席,拖欠(4) [计算机] 缺省D返回语句1、return [riˈtə:n]:子程序返回语句(可以带参数,也看不带参数)(1)v.返回、(2)恢复、(3)归还、(4)盈利三、存储类型关键字(4个)1、auto [ˈɔ:təu] :声明自动变量(一般不使用)(1)自动的、(2)汽车automobile [ˈɔ:təməubi:l]2、extern:声明变量是在其他文件正声明(也可以看做是引用变量)(1)外部(的)、(2)external [ikˈstə:nəl]a.外部的,外面的,外表的3、register [ˈredʒistə]:声明积存器变量(1)寄存器、(2)注册(表)(3)登记(表)4、static[ˈstætik] :声明静态变量(1)a. 静态的,静电的、(2)n. 静电,静电干扰四、其它关键字(4个):1、const :声明只读变量(1)常量、(2)常数、(3)编译时常量2、sizeof:计算数据类型长度(1)n. …的大小、(2)占的字节数(3)size [saiz]n.大小,尺寸 vt.按大小排列(或分类)3、typedef:用以给数据类型取别名(当然还有其他作用)(1)n. 类型定义、(2)数据类型说明(3)type [taip]n.类型,种类,品种;铅字 v.打(字)4、volatile [ˈvɔlətail]:说明变量在程序执行中可被隐含地改变(1)a.动荡不定的、(2)反复无常的、(3)易挥发的。
explicit关键字的用法
explicit关键字的用法(原创实用版)目录1.引言2.Explicit 关键字的含义3.Explicit 关键字的使用场景4.Explicit 关键字的作用5.示例6.结论正文【引言】在编程语言中,关键字(keyword)是指被编程语言保留用于特定目的的单词。
在这些关键字中,有一种被称为 explicit 关键字。
本文将详细介绍 explicit 关键字的含义、使用场景、作用以及示例。
【Explicit 关键字的含义】Explicit 关键字通常用于表示显式(explicit)的意思。
在编程语言中,它用于强调某个操作或变量需要显式声明或定义,而不是隐式(implicit)地默认或推断。
【Explicit 关键字的使用场景】Explicit 关键字的使用场景包括但不限于以下几种情况:1.声明变量:在声明变量时,使用 explicit 关键字可以强调变量需要显式声明,而不是隐式推断。
例如,在 C++中,可以使用`explicit`关键字声明一个显式转换的变量。
2.函数参数:在函数参数中使用 explicit 关键字,可以强调该参数需要显式传递,而不是隐式地从函数内部推断。
例如,在 C++中,可以使用`explicit`关键字声明一个显式参数的函数。
3.类型转换:在类型转换中使用 explicit 关键字,可以强调该转换需要显式进行,而不是隐式地进行自动类型转换。
例如,在 C++中,可以使用`explicit`关键字声明一个显式类型转换。
【Explicit 关键字的作用】Explicit 关键字的主要作用是提高代码的可读性和明确性。
通过使用 explicit 关键字,程序员可以清晰地表示某个操作或变量需要显式声明或定义,从而避免因隐式推断导致的错误或混淆。
【示例】以下是一个 C++示例,展示了如何使用 explicit 关键字声明一个显式转换的变量、一个显式参数的函数以及一个显式类型转换:```cpp#include <iostream>// 使用 explicit 关键字声明一个显式转换的变量explicit int explicitVar = 10;// 使用 explicit 关键字声明一个显式参数的函数explicit void explicitFunc(int explicitParam) {std::cout << "Explicit function called with explicit parameter: " << explicitParam << std::endl;}// 使用 explicit 关键字声明一个显式类型转换explicit int explicitConvert(double value) {return value * 2;}int main() {// 调用显式函数explicitFunc(5);// 使用显式转换int result = explicitConvert(3.5);std::cout << "Result of explicit conversion: " << result << std::endl;return 0;}```【结论】总之,explicit 关键字在编程语言中用于强调某个操作或变量需要显式声明或定义,而不是隐式地默认或推断。
c语言32个关键字详解
c语言32个关键字详解auto:当定义函数参数和局部变量时,auto关键字的作用是根据变量类型的自动识别特性而获取变量的存储空间。
break:break关键字是用来终止当前循环或者终止switch/case 语句的执行,它后面可以加一个匹配标记,用来提供执行跳转。
case:case关键字用于在switch语句中定义不同的情况,当switch语句中的表达式匹配到case后面的值时,就会执行这个case 子句里面的语句。
char:char关键字用于定义字符型变量,它存储一个字符,可以用于字符串的存储和读取。
const:const关键字是一个修饰符,它可以修改变量的属性,使其值不可以被修改。
continue:continue关键字用于终止当前循环中本次循环的剩余语句,然后继续进行下一次循环。
default:default关键字用于定义switch语句中匹配不上任何case时,将执行的代码。
do:do关键字用于开始一个do-while循环,do-while循环是先执行循环体,然后判断条件,如果条件满足则继续执行当前循环,如果条件不满足则跳出循环。
double:double关键字用于定义双精度浮点型变量,它可以存储浮点数,也可以存储虚数。
else:else关键字用于在if...else语句中定义else条件语句,当if语句的表达式结果为false时,就会执行else子句。
enum:enum关键字是用来定义枚举类型数据,它可以定义一组常量,可以用来表示特殊的数值或代表某些属性。
extern:extern关键字用于声明外部变量和函数,其实它是一个用于程序编译的修饰符,只声明不定义,定义在另一模块中。
float:float关键字用于定义单精度浮点型变量,它可以存储浮点数,也可以存储虚数。
for:for关键字用于开始一个for循环,for循环是先判断条件,如果条件满足,则执行循环体,如果条件不满足,则跳出循环。
goto:goto关键字用于把程序的执行控制权转移到指定的位置,它可以用于实现不同的跳转,但不能跨函数调用。
c语言关键字及其含义用法
c语言关键字及其含义用法C语言的关键字及其含义和用法如下:1.数据类型关键字:•char:声明字符型变量或函数。
•int:声明整型变量或函数。
•short:声明短整型变量或函数。
•long:声明长整型变量或函数。
•float:声明浮点型变量或函数。
•double:声明双精度浮点型变量或函数。
•enum:声明枚举类型变量或函数(将变量的值一一列出)。
•signed:声明有符号类型变量或函数。
•unsigned:声明无符号类型变量或函数。
•void:声明函数无返回值或无参数,声明无类型指针。
•struct:声明结构体变量或函数。
•union:声明共用数据类型。
2.控制语句关键字:•break:跳出当前循环。
•continue:中断本次循环,并转向下一次循环。
•default:switch语句中的默认选择项。
•do:用于构成do-while循环语句。
•else:构成if-else选择程序结构。
•for:构成for循环语句。
•if:构成if-else选择结构。
•return:用于返回函数的返回值。
•switch:用于开关语句。
•case:开关语句分支。
•while:循环语句的循环条件。
•goto:无条件跳转。
3.存储类型关键字:•auto:声明自动变量(缺省时编译器一般默认为auto)。
•extern:声明变量是在其他文件正声明(也可以看做是引用变量)。
•register:声明积存器变量。
•static:声明静态变量。
1.其他关键字:•const:声明只读类型变量。
•volatile:说明变量在程序执行过程中可能被隐含的改变。
•typedef:用于给数据类型取别名。
•sizeof:计算对象所占内存空间大小。
这些关键字在C语言中具有特定的含义和用法,它们用于声明变量、函数、控制程序流程、定义数据类型等。
熟练掌握这些关键字是编写C语言程序的基础。
c语言常用关键字及其含义
c语言常用关键字及其含义C语言常用关键字及其含义如下:1. auto:声明自动变量。
自动变量是在函数内部定义的变量,其生命周期与函数的执行周期相同。
2. break:跳出当前循环或switch语句。
3. case:在switch语句中,用于标识一个分支。
4. const:定义常量,声明的变量值不能被修改。
5. continue:跳过当前循环的剩余代码,进入下一次循环。
6. default:在switch语句中,表示没有与任何case匹配时执行的代码块。
7. do:循环语句的起始关键字,用于执行一个循环体,并在判断条件为真时重复执行。
8. double:声明双精度浮点型变量。
9. else:与if语句配合使用,表示在if条件不成立时执行的代码块。
10. enum:定义枚举类型。
枚举类型是一个由一组常量组成的数据类型。
11. extern:声明变量或函数的外部链接。
12. float:声明单精度浮点型变量。
13. for:循环语句的起始关键字,用于执行一个循环体,并在判断条件为真时重复执行。
14. if:条件语句的起始关键字,用于根据条件判断是否执行某个代码块。
15. int:声明整型变量。
16. long:声明长整型变量。
17. register:声明寄存器变量。
寄存器变量存储在寄存器中,访问速度更快。
18. return:从函数中返回值,并终止函数的执行。
19. short:声明短整型变量。
20. signed:声明有符号类型变量。
21. sizeof:返回数据类型或变量所占的字节数。
22. static:声明静态变量,其生命周期持续整个程序的执行过程。
23. struct:定义结构体类型。
结构体是由不同类型的数据组成的数据类型。
24. switch:多分支选择语句,根据不同的值执行不同的代码块。
25. typedef:为已有数据类型定义一个别名。
26. union:定义联合类型。
联合类型可以在同一内存位置存储不同类型的数据。
C语言的关键字共有32个
一、C语言的关键字共有32个,根据关键字的作用,可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。
1 数据类型关键字(12个):(1) char (柴(发4声)尔):声明字符型变量或函数,(2) double (搭泊):声明双精度变量或函数(3) enum (呢末):声明枚举类型(4) float(佛唠特):声明浮点型变量或函数(5) int(硬特):声明整型变量或函数(6) long(浪):声明长整型变量或函数(7) short(邵特):声明短整型变量或函数(8) signed(塞依特):声明有符号类型变量或函数(9) struct(死爪克特):声明结构体变量或函数(10) union(由内呕):声明共用体(联合)数据类型(11) unsigned(安塞依特):声明无符号类型变量或函数(12) void(外偶德):声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)2控制语句关键字(12个):A循环语句(1) for(否发4声):一种循环语句(可意会不可言传)(2) do (杜):循环语句的循环体(3) while(外偶):循环语句的循环条件(4) break(波瑞克):跳出当前循环(5) continue(肯忒牛):结束当前循环,开始下一轮循环B条件语句(1) if(诶福): 条件语句[/code(扣的)](2) else(艾斯):条件语句否定分支(与if(诶福) 连用)(3) goto(沟吐):无条件跳转语句C开关语句(1) switch(思维吃) :用于开关语句(2) case(诶斯):开关语句分支(3) default (得儿赴澳特):开关语句中的“其他”分支D返回语句Return(瑞腾儿) :子程序返回语句(可以带参数,也看不带参数)3 存储类型关键字(4个)(1)auto (噢吐):声明自动变量一般不使用(2)extern(艾克斯腾儿):声明变量是在其他文件正声明(也可以看做是引用变量)(3)register(瑞盖斯特):声明积存器变量(4)static (斯搭科特):声明静态变量4 其它关键字(4个):(1)const (考斯特):声明只读变量(2)sizeof(塞兹噢夫):计算数据类型长度(3)typedef(汰泼得福):用以给数据类型取别名(当然还有其他作用(4)volatile(喔赖忒偶):说明变量在程序执行中可被隐含地改变二、C语言中的9中控制语句goto(够头)语句:无条件转向; If(诶福)语句:判断语句;While(外偶)循环语句;do-while(杜-外偶)语句:先执行循环体,然后判断循环条件是否成立. 之后继续循环;for(否发4声)语句:循环,可替代while(外偶)语句; 只是用法不同;break(布瑞科)语句跳出本层的循环;(只跳出包含此语句的循环)continue(肯忒牛)语句:继续(一般放到循环语句里,不在执行它下面的语句,直接跳到判断语句例:for(否发4声)语句,就直接跳到第二个分号处,while(外偶)语句,就直接跳到while(外偶)的括号里;switch(思维吃)语句:多相选择;return(瑞腾儿)语句:返回;浅谈小学生如何学英语英语作为国际通用的语言,随着世界经济的发展和中国加入wto,英语所起的作用越来越大,因此,英语亟待于在我国普及。
C++ 中explicit 关键字的作用
C++ 中explicit 关键字的作用在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。
explicit使用注意事项:explicit 关键字只能用于类内部的构造函数声明上,explicit 关键字作用于单个参数的构造函数。
在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换。
在C++中,如果一个类有只有一个参数的构造函数,C++允许一种特殊的声明类变量的方式。
在这种情况下,可以直接将一个对应于构造函数参数类型的数据直接赋值给类变量,编译器在编译时会自动进行类型转换,将对应于构造函数参数类型的数据转换为类的对象。
如果在构造函数前加上explicit修饰词,则会禁止这种自动转换,在这种情况下,即使将对应于构造函数参数类型的数据直接赋值给类变量,编译器也会报错。
下面以具体实例来说明。
建立people.cpp 文件,然后输入下列内容:class People{public:int age;People (int a){age=a;}};void foo ( void ){People p1(10);//方式一People* p_p2=new People(10); //方式二People p3=10; //方式三}这段C++程序定义了一个类people,包含一个构造函数,这个构造函数只包含一个整形参数a,可用于在构造类时初始化age变量。
然后定义了一个函数foo,在这个函数中我们用三种方式分别创建了三个10岁的“人”。
第一种是最一般的类变量声明方式。
第二种方式其实是声明了一个people类的指针变量,然后在堆中动态创建了一个people实例,并把这个实例的地址赋值给了p_p2.第三种方式就是我们所说的特殊方式,为什么说特殊呢?我们都知道,C/C++是一种强类型语言,不同的数据类型是不能随意转换的,如果要进行类型转换,必须进行显式强制类型转换,而这里,没有进行任何显式的转换,直接将一个整型数据赋值给了类变量p3.因此,可以说,这里进行了一次隐式类型转换,编译器自动将对应于构造函数参数类型的数据转换为了该类的对象,因此方式三经编译器自动转换后和方式一最终的实现方式是一样的。
构造函数 explicit
构造函数 explicit构造函数是一种特殊的成员函数,用于创建和初始化对象。
在C++中,构造函数可以被声明为显式构造函数或隐式构造函数,其中显式构造函数使用关键字“explicit”进行声明。
本文将探讨显式构造函数的定义、示例和使用方法。
一、显式构造函数的定义显式构造函数是指只有一个参数的构造函数,且该参数没有默认值。
用“explicit”关键字显式地声明构造函数,在这种情况下,只有当我们使用显式构造函数时,编译器才会将它用于隐式类型转换。
在类中声明显式构造函数的语法如下:class MyClass{ public: explicit MyClass(int val); };上述代码声明了一个类MyClass,该类的显式构造函数接受一个int参数val,但是不能通过默认构造函数来创建对象。
也就是说,我们必须显式地调用构造函数并传递一个参数来创建该对象,否则编译器将会抛出错误。
二、显式构造函数的示例下面是一个简单的例子,用于说明显式构造函数可以防止隐式类型转换:``` #include<iostream> using namespace std;class MyBool{ private: bool b; public: explicit MyBool(bool val):b(val){} //显式构造函数 bool getValue() const{return b;} };int main(){ MyBool b1(true); MyBool b2 = 7; //编译错误! return 0; } ```上例中,MyBool是一个包装布尔类型的类。
显式构造函数需要一个bool值作为其参数,从而使我们无法使用隐式类型转换来创建MyBool对象。
由于显式构造函数不能进行隐式类型转换,所以下面的代码将无法编译:```MyBool b2 = 7;```在上述代码中,我们试图使用一个整型值7来隐式地创建一个MyBool对象b2,但是编译器会抛出错误,因为MyBool的构造函数被显式地声明为显式构造函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
认识C++ 中的explicit 关键字
(Danny Kalev发表于2004-12-28 11:01:04)
带单一参数的构造函数在缺省情况下隐含一个转换操作符,请看下面的代码:
class C {
int i;
//...
public:
C(int i);//constructor and implicit conversion operator
//as well
};
void f() {
C c(0);
c = 5; //将5 隐式转换为C 对象,然后赋值
}
编译器重新编辑上述例子代码,如下:
//////////////////////////////////////////////////////////////////////////////////////////
//"c=5;" 被编译器转换成下面这个样子:
/////////////////////////////////////////////////////////////////////////////////////////
C temp(5);// 实例化一个临时对象,
c = temp; // 用= 赋值
temp.C::~C(); // temp 的析构函数被激活
在很多情况下,这个转换是有意的,并且是正当的。
但有时我们不希望进行这种自动的转换,例如:
class String {
int size;
char *p;
//..
public:
String (int sz); //这里不希望进行隐式转换操作
};
void f ()
{
String s(10);
// 下面是一个程序员的编码;发生一个意想不到的转换:
s = 100; // 糟糕,100 被转换为一个String,然后被赋值给s
}
为了避免这样的隐式转换,应该象下面这样显式声明该带单一参数的构造函数:
class String {
int size;
char *p;
//..
public:
// 不要隐式转换
explicit String (int sz);
String (const char *s, int size n = 0); // 隐式转换
};
void f ()
{
String s(10);
s = 100; // 现在编译时出错;需要显式转换:
s = String(100); // 好;显式转换
s = "st"; // 好;此时允许隐式转换
}。