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 I2C设备驱动编写(三)-实例分析AM3359
TI-AM3359 I2C适配器实例分析 I2C Spec简述 特性: 兼容飞利浦I2C 2.1版本规格 支持标准模式(100K bits/s)和快速模式(400K bits/s) 多路接收.发送模式 ...
- 手机APP上下滚动翻页效果
//页面初期加载时 $(document).ready(function () { //加载第一页 LoadList(); //滚动换页 $( ...
- Python自动化之session
request.body 所有请求内容的原生数据 request.META 所有请求头的原生数据 cookie返回存在于响应头里面 session session是保存在服务端的键值对 cookie和 ...
- 5种Web常见编码、变换算法的自动识别
#coding=utf-8 #识别字符序列变换算法,当前支持标准的MD5.SHA-1.Base64,及主流的URL编码.HTML编码 import re import sys #MD5判断函数 def ...
- phpstorm 解决svn 无法提交的问题
phpstorm 无法用svn 提交 提示如下错误: 网上找的解决办法 : 由于安装的TortoiseSVN工具,本身是带有command-line功能的(没有安装)如图: 使用Intellij ID ...
- eclipse+tomcat+httpServlet初学
1.在eclipse中配置tomcat,参考上一边文章,建立的web项目tomcatWeb目录结构 2.添加Servlet处理类 3. 实现doGet()与doPost()方法: <span s ...
- 理解CSS中的三种选择器>+~
1. p~ul p和ul有相同的父元素,选择出p元素之后的所有ul元素,其中,p和ul不一定是紧随,但是必须有相同的父元素 E+F 相邻兄弟选择器.选择匹配F的元素,且该元素位于 ...
- asp.net mvc 两级分类联动方法示例
前台视图代码 <%:Html.DropDownList("AwardClassMainID","请选择")%> <%:Html.DropDow ...
- Lamda和Linq语法对比详细
本人转载:http://www.cnblogs.com/knowledgesea/p/3897665.html 闲言碎语 近期比较忙,但还是想写点什么,就分享一些基础的知识给大家看吧,希望能帮助一些l ...
- PYTHON queue
http://blog.csdn.net/bravezhe/article/details/8588437