前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >​C++ explicit 和 inline 关键字,你知道多少?

​C++ explicit 和 inline 关键字,你知道多少?

作者头像
字节流动
发布2022-05-19 08:27:46
1.4K0
发布2022-05-19 08:27:46
举报
文章被收录于专栏:字节流动

C++ explicit 关键字的作用

在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。

explicit使用注意事项:

  • explicit 关键字只能用于类内部的构造函数声明上
  • explicit 关键字作用于单个参数的构造函数。
  • 在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换

例子:

未加 explicit 时的隐式类型转换

代码语言:javascript
复制
class Circle 
{ 
public: 
    Circle(double r) : R(r) {} 
    Circle(int x, int y = 0) : X(x), Y(y) {} 
    Circle(const Circle& c) : R(c.R), X(c.X), Y(c.Y) {} 
private: 
    double R; 
    int    X; 
    int    Y; 
}; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
//发生隐式类型转换 
//编译器会将它变成如下代码 
//tmp = Circle(1.23) 
//Circle A(tmp); 
//tmp.~Circle(); 
    Circle A = 1.23;  
//注意是int型的,调用的是Circle(int x, int y = 0) 
//它虽然有2个参数,但后一个有默认值,任然能发生隐式转换 
    Circle B = 123; 
//这个算隐式调用了拷贝构造函数 
    Circle C = A; 

    return 0; 
} 

加了explicit关键字后,可防止以上隐式类型转换发生

代码语言:javascript
复制
class Circle 
{ 
public: 
    explicit Circle(double r) : R(r) {} 
    explicit Circle(int x, int y = 0) : X(x), Y(y) {} 
    explicit Circle(const Circle& c) : R(c.R), X(c.X), Y(c.Y) {} 
private: 
    double R; 
    int    X; 
    int    Y; 
}; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
//一下3句,都会报错 
    //Circle A = 1.23;  
    //Circle B = 123; 
    //Circle C = A; 

//只能用显示的方式调用了 
//未给拷贝构造函数加explicit之前可以这样 
         Circle A = Circle(1.23); 
        Circle B = Circle(123); 
        Circle C = A; 

//给拷贝构造函数加了explicit后只能这样了 
         Circle A(1.23); 
        Circle B(123); 
        Circle C(A); 
    return 0; 
} 

C++ inline 关键字

inline 是用来声明内联函数,引入内联函数的目的是为了解决程序中函数调用的效率问题。

这么说吧,程序在编译器编译的时候,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体进行替换,而对于其他的函数,都是在运行时候才被替代

这其实就是个空间代价换时间的i节省。所以内联函数一般都是1-5行的小函数。

在使用内联函数时要留神:

  • 1.在内联函数内不允许使用循环语句和开关语句;
  • 2.内联函数的定义必须出现在内联函数第一次调用之前;
  • 3.类结构中所在的类说明内部定义的函数是内联函数。

参考:

https://www.runoob.com/cplusplus/cpp-inline-functions.html

https://www.cnblogs.com/this-543273659/archive/2011/08/02/2124596.html

-- END --

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 字节流动 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档