什么是C++中的“最小特权原则”?
的有关信息介绍如下:
C++中最小特权原则和指针在学习C++语言的时候,我不知道大家有没有接触过最小特权原则这条定义,我刚刚接触的时候,因为书中没有明确的概念,一时没有弄明白,请教了几个已经学习了的朋友,好像因为教材的不一样,他们没有接触过,我也是后来到网上查(网上说的好像不是一回事)再结合教材,才领会的……具体如下:最小特权原则定义:一方面赋予主体必不可少的特权,保证主体能渗歼在所赋予的特权之下完成所需要完成的任务或操作;另一方面,它只赋给主体必不可少的特权。这就限制了每个主体所能进行的操作!看到这里,相信大家有定义中已经明白了什么是最小特权原则!但是这个原则与我们写程序到底有多大的关系呢?那么在这里还应该提到const限定符,使用这个符号修饰变量和函数参数,那么就限定了其被修改的权限(不能别修改),就是程序安全运行的一个行之有效的保证,那么使用和不使用const修饰函数参数有多种可能性,我们该怎样选择最恰当的时候呢?!!!应该以最小特权原则为指导!举例说明,考虑一个函数,它的参数是一个一维数组及该数李喊友组的大小,功能是打印该数组。这样的函数应该循环遍历数组并输出每个元素。在函数体中用数组的大小来决定数组的最大下标,以便当打印完成时循环可以终止。此数组的大小在函数体中并没有改变,因此,它应该被声明为const。当然,因为该数组只是被打印,它也只应该声明为const。这点非常重要,因为一个完整的数组总是按引用传递的,很容易在被调用函数中修改。现在说一下指针和最小特权原则的联系:将指针传递给函数有四种方式:指向非常量数据的非常量指针;指向常量数据的非常量指针;指向非常量数据的常量指针;指向常量数据的常量指针。每种层次都提供了不同的访问权限。(1) 指向非常量数据的非常量指针:#includeusing std::cout;using std::endl;#includeusing std::islower;using std::toupper;void convertToUppercase( char * );int main(){ char phrase[] = “ characters and $32.98”; cout << “The phrase before conversion is: ” << phrase; convertToUppercase( phrase ); cout << “\nThe phrase after conversion is: “ << phrase << endl;}void convertToUppercase( char *sPtr ){while ( *sPtr != ‘\0’ ){ If ( islower( *sPtr) ) *sPtr = toupper( *sPtr );sPtr++;}}这段程序是大小写字符转换,这里使用指哪槐向非常量数据的非常量指针,这种形式的指针具有最大的访问权限,可以通过间接引用指针使其修改数据,也可以修改指针,使其指向其他数据。声明一个指向非常量数据的非常量指针不需要包含const。可以用这样的指针在函数中接收一空字符结束的字符串,函数改变指针的值来处理(并且可能修改)字符串中每个字符。上面的程序中,函数convertToUppercase声明参数sPtr为一个指向非常量数据的非常量指针。函数逐个处理窜出在字符数组phrase中以空字符终止的字符串的字符。大家都知道一个字符数组的名字实际就是一个指向该数组第一个元素的指针,因此,可以吧phrase作为参数传递给convertToUppercase。函数islower接收一个字符参数,如果该字符是小写字符,则返回true,否则返回false。函数toupper接收一个字符参数,它把‘a’到‘z‘之间的小写字符转换为大写,其他保持不变。其运行结果是函数指针有着最大的读取写入权限,可以修改任何参数……