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 ...
随机推荐
- GNU风格 汇编语法总结(转)
转载自:http://blog.sina.com.cn/s/blog_78d30f6b0101713r.html 汇编源程序一般用于系统最基本的初始化:初始化堆栈指针.设置页表.操作 ARM的协处理器 ...
- openstack 调试
- Y2K Accounting Bug
题目: Description Accounting for Computer Machinists (ACM) has sufferred from the Y2K bug and lost som ...
- DES加密,Tk写的简单的GUI
# -*- coding: UTF-8 -*- from Tkinter import * from tkMessageBox import * ip = [ 58,50,42,34,26,18,10 ...
- Codeigniter数据库操作
//查询: $query = $this->db_query("SELECT * FROM table"); ================================ ...
- Android 镜像地址[持续更新中]
这里收集android国内镜像资源地址 大连东软信息学院镜像服务器地址:– http://mirrors.neusoft.edu.cn 端口:80北京化工大学镜像服务器地址:– IPv4: http: ...
- The server quit without updating PID file (mysql.pid)一次意外mysql停止运行备忘录
[root@iZ23tsvd9h4Z ~]# service mysqld status ERROR! MySQL (Percona Server) is not running, but lock ...
- ibatis 开发中的经验 (一)ibatis 和hibernate 在开发中的理解
这个项目的底层是用ibatis框架完毕,这几天也是都在用这个框架写代码,也有了一些简单的理解,把项目拿过来后基本的配置都已经配置好了,比方一些事务.日志控制等,在开发中主要用到的是写SQL语句以及熟悉 ...
- [Javascript] delete keyword
delete keyword doesn't actually delete the value but just the reference. var me = { name: { first: & ...
- mysql学习笔记4---mysql 复制---源代码
mysql: c:底层 C++:相对上层 主备复制:主库通知备库来取 MYSQL复制源代码代码:SQL文件夹 int start_slave_thread( #ifdef HAVE_PSI_INTER ...