C++ 中的权限控制
权限控制,指的是用户只能访问符合自己权限的资源,系统对用户进行权限控制以防止用户的误操作/恶意操作等。
在C++代码中,权限控制指的是程序员在接口声明/类声明/函数声明等中进行的授权控制。如下面的代码:
复制代码
class base
{
//friend 授权getX函数对本类的完全控制
friend int getX(base obj);
//public 授权外部对此类中被声明为public的函数,类成员的访问与修改
public:
//后置的const 禁止此函数对本类的任何修改
virtual void show() const
{
cout《"hello from base"《endl;
}
//protected 仅授权子类对此类中被声明为protected的函数,类成员的访问与修改
protected:托福答案
//参数中的const 禁止此函数对传入参数的任何修改
//后置的const 禁止此函数对本类的任何修改
int getSum(const int x,const int y) const
{
return x+y;
}
//private 禁止对此类中被声明为private的函数,类成员的访问与修改
private:
int m_x;
};
int getX(base obj)
{
return obj.m_x;
}
//public 表示继承关系对外可见,外部可将此类视作base类型
class derived : public base
{
public:
virtual void show() const
{
cout《"hello from derived"《endl;
}
private:
int m_Y;
}
复制代码
c++11中新增的的lambda函数中也有权限控制相关的部分,如下代码:
复制代码
void foo(int x)
{
int y = 0;
//[&]授权对此处所有可见变量进行完全控制
auto lambda_func1 = [&](){x+=1;y-=1;};
//[=]仅授权对此处所有可见变量进行读取
auto lambda_func2 = [=](){int z = x+y;};
//[=x,&y]仅授权对此处所x进行读取,对y进行读取/修改
auto lambda_func3 = [=x,&y](){int z = x+y;y++;};
}
复制代码雅思答案
权限控制是个好东西,能够让我们最小化自己的权限以防任何的误操作,同时也能更清晰的进行编码debug,查找bug时能迅速定位相关函数代码。
如果在c++中的全局函数中,类成员函数生命中确定更详细的权限控制,并且权限进行继承,不加权限控制符则默认与传统C++代码一致,如下代码:
复制代码
//global var
const int g_nVar = 0;
//class
//禁止访问任何外部变量
[NA] class base
{
//授权getX仅能读取本类的m_x变量
[=m_x] friend int getX(base obj);
public:
//此函数禁止访问本类中任何变量
[NA] int getConstant() const
{
return 10;
}
//授权此函数访问/修改m_x
[&m_x] int modifiedX()
{
return ++m_x;
}
//授权此函数可读取本类中所有变量
[=] void show() const
{
cout《"hello from base , m_x = "《m_x《endl;
}
private:
int m_x;
};
[=] int getX(base obj)
{
return obj.m_x;
}
//禁止访问任何外部变量
[NA] void foo(int x)
{
int y = 0;
//[&]授权对此处所有可见变量进行完全控制
auto lambda_func1 = [&](){x+=1;y-=1;};
//[=]仅授权对此处所有可见变量进行读取
auto lambda_func2 = [=](){int z = x+y;};
//[=x,&y]仅授权对此处所x进行读取,对y进行读取/修改
auto lambda_func3 = [=x,&y](){int z = x+y;y++;};
}
复制代码
估计对于那些受够了由于在类的不知道哪个犄角旮旯里修改了某些成员变量,全局变量的bug的童鞋们是个好办法吧 ~
C++ 中的权限控制的更多相关文章
- <实训|第九天>掌握linux中普通的权限控制和三种特殊的权限(sst),做合格的运维工程师
linux中,权限的学习是必不可少的,不论是作为一名运维工程师或者是单一的管理者,学习好linux中的权限控制,你就可以保护好自己的隐私同时规划好你所管理的一切. 权限的学习是很多的,不要认为自己已经 ...
- django中的权限控制(form增删改)
Django默认提供了权限控制,但只能对使用了其自带的登录认证的用户进行权限控制,说白了就是只能对存储在auth_user表中的用户进行权限控制,但不能对未登录过的用户进行权限控制.但如果通过集成LD ...
- vue基于页面中按钮权限控制
main.js // 权限 /** 权限指令,对按钮权限的控制 **/ Vue.directive('allow', { bind: function(el, binding) { // 通过当前按钮 ...
- 如何优雅的在 vue 中添加权限控制
前言 在一个项目中,一些功能会涉及到重要的数据管理,为了确保数据的安全,我们会在项目中加入权限来限制每个用户的操作.作为前端,我们要做的是配合后端给到的权限数据,做页面上的各种各样的限制. 需求 因为 ...
- 如何在 vue 中添加权限控制管理?---vue中文社区
前言 在一个项目中,一些功能会涉及到重要的数据管理,为了确保数据的安全,我们会在项目中加入权限来限制每个用户的操作.作为前端,我们要做的是配合后端给到的权限数据,做页面上的各种各样的限制. 需求 因为 ...
- <实训|第十三天>linux中ACL权限控制以及磁盘配额,附编译属于自己的linux内核
[root@localhost~]#序言 首先讲讲昨天关于缩容失败,开不机的解决方法:ACL权限也算是一个很重要的知识点,不难,但是很实用:磁盘配额一般不需要自己弄,但是要懂得原理.剩下的就是编译属于 ...
- 基于SpringMVC拦截器和注解实现controller中访问权限控制
SpringMVC的拦截器HandlerInterceptorAdapter对应提供了三个preHandle,postHandle,afterCompletion方法. preHandle在业务处理器 ...
- SpringMVC之八:基于SpringMVC拦截器和注解实现controller中访问权限控制
SpringMVC的拦截器HandlerInterceptorAdapter对应提供了三个preHandle,postHandle,afterCompletion方法. preHandle在业务处理器 ...
- SAP CRM Transaction处理中的权限控制
当试图打开一个Opportunity时, 系统会进行如下一系列的权限检查: 1. 检查Authorization object CRM_ORD_OP: 此处会检查当前user的partner func ...
随机推荐
- linux IPC总结——管道
管道 管道是unix ipc的最古老形式,是一种在内存中的特殊文件,只能在具有公共祖先的进程之间使用(即父子进程,兄弟进程). 管道由pipe函数创建 #include <unistd.h> ...
- HDU 5750 Dertouzos
Dertouzos Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
- Java整型与字符串相互转换(转)
1如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([S ...
- Java - 推断元音辅音
随机生成字母, 推断是元音字母还是辅音字母. [0,26) + 偏移量'a'就能够生成小写字母. 代码: //: Main.java import java.util.Random; /** * 推断 ...
- BZOJ 2754([SCOI2012]喵喵叫的星球-统计序列的后缀阵列中子序列出现次数)
2754: [SCOI2012]喵喵叫的星球 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 805 Solved: 380 [id=2754&qu ...
- PHP汉字转拼音的两种方法+PHP提取汉字(中文)方法
方法一:依据ASCII码转换,GB2312库对多音字也无能为力. GB2312标准共收录6763个汉字,不在范围内的汉字是无法转换.如:中国前总理朱镕基的"镕"字. GB2312中 ...
- android83 Activity的生命周期,启动模式,返回时传递数据
#Android四大组件 * Activity * BroadCastReceiver * Service * ContentProvider #Activity生命周期 * oncreate:Act ...
- python学习笔记--Django入门四 管理站点--二
接上一节 python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...
- Android(java)学习笔记181:利用Service在后台播放背景音乐
1.在android应用程序里,有一种没有UI的类(android.app.Service)——Service.简单来说,Service是一个 background process(背景程序),通过背 ...
- HDU 4336 Card Collector(容斥)
题意:要收集n种卡片,每种卡片能收集到的概率位pi,求收集完这n种卡片的期望.其中sigma{pi} <=1; 思路:容斥原理.就是一加一减,那么如何算期望呢.如果用二进制表示,0表示未收集到, ...