随笔 - 109  文章 - 0  评论 - 32 
  2009年7月31日
搜索引擎通过一种程序robot(又称spider),自动访问互联网上的网页并获取网页信息。
  您可以在您的网站中创建一个纯文本文件robots.txt,在这个文件中声明该网站中不想被robot访问的部分,这样,该网站的部分或全部内容就可以不被搜索引擎收录了,或者指定搜索引擎只收录指定的内容。
  一、 什么是robots.txt文件
  搜索引擎通过一种程序robot(又称spider),自动访问互联网上的网页并获取网页信 息。您可以在您的网站中创建一个纯文本文件robots.txt,在这个文件中声明该网站中不想被robot 访问的部分,这样,该网站的部分或全部内容就可以不被搜索引擎收录了,或者指定搜 索引擎只收录指定的内容。
  二、 robots.txt文件放在哪里
  robots.txt文件应该放在网站根目录下。举例来说,当robots访问一个网站(比如 http://www.abc.com)时,首先会检查该网站中是否存在http://www.abc.com/robots.txt 这个文件,如果机器人找到这个文件,它就会根据这个文件的内容,来确定它访问权限的范 围。如:
  http://www.w3.org/ —— http://www.w3.org/robots.txt
  http://www.w3.org:80/ —— http://www.w3.org:80/robots.txt
  http://www.w3.org:1234/ —— http://www.w3.org:1234/robots.txt
  http://w3.org/ —— http://w3.org/robots.txt
  三、 robots.txt文件的格式
  “robots.txt”文件包含一条或更多的记录,这些记录通过空行分开(以CR,CR/NL,or NL作为结束符),每一条记录的格式如下所示:
  “<field>:<optionalspace><value><optionalspace>”
  在该文件中可以使用#进行注解,具体使用方法和UNIX中的惯例一样。该文件中的记录 通常以一行或多行User-agent开始,后面加上若干Disallow行,详细情况如下:
  User-agent:
  该项的值用于描述搜索引擎robot的名字,在“robots.txt”文件中,如果有多条 User-agent记录说明有多个robot会受到该协议的限制,对该文件来说,至少要有一条User- agent记录。如果该项的值设为*,则该协议对任何机器人均有效,在“robots.txt”文件 中,“User-agent:*”这样的记录只能有一条。
  Disallow:
  该项的值用于描述不希望被访问到的一个URL,这个URL可以是一条完整的路径,也可以 是部分的,任何以Disallow开头的URL均不会被robot访问到。例如:
  “Disallow: /help”对/help.html 和/help/index.html都不允许搜索引擎访问, 而“Disallow: /help/”则允许robot访问/help.html,而不能访问/help/index.html。
  任何一条Disallow记录为空,说明该网站的所有部分都允许被访问,在 “/robots.txt”文件中,至少要有一条Disallow记录。如果“/robots.txt”是一个空文 件,则对于所有的搜索引擎robot,该网站都是开放的。
  四、robots.tst文件存在的意义
  有些人会问,即然robots文件没弄好,或出错了,会影响整个网站的收录,那为什么还要这个文件呢?
  其实robots是为特定需的站长准备的,因为有些网站,有一些页面是站长不想被SE收录的,所以才有了这个robots文件。
  五、 robots.txt文件用法举例
  例1、禁止所有搜索引擎访问网站的任何部分
  User-agent: *
  Disallow: /
  例2、允许所有的robot访问
  User-agent: *
  Disallow:
  (或者也可以建一个空文件 "/robots.txt" file)
  例3、禁止某个搜索引擎的访问
  User-agent: BadBot
  Disallow: /
  例4、允许某个搜索引擎的访问
  User-agent: baiduspider
  Disallow:
  User-agent: *
  Disallow: /
  例5、一个简单例子
  在这个例子中,该网站有三个目录对搜索引擎的访问做了限制,即搜索引擎不会访问这三个目录。
  User-agent: *
  Disallow: /cgi-bin/
  Disallow: /tmp/
  Disallow: /joe/
  需要注意的是对每一个目录必须分开声明,而不要写成:“Disallow: /cgi-bin/ /tmp/”。
  User-agent:后的* 具有特殊的含义,代表“any robot”,所以在该文件中不能有 “Disallow: /tmp/*” or “Disallow: *.gif”这样的记录出现。
  五、robots.txt文件参考资料
  robots.txt文件的更具体设置,请参看以下链接:
  1、http://www.robotstxt.org/wc/faq.html
  2、Web Server Administrator's Guide to the Robots Exclusion Protocol
  3、HTML Author's Guide to the Robots Exclusion Protocol
  4、The original 1994 protocol description, as currently deployed
  5、The revised Internet-Draft specification, which is not yet pleted or implemented
posted @ 2009-07-31 20:27 Myhsg 阅读(63) 评论(0) 编辑

class A
{
public:
    static const int ci;
};
//const int A::ci = 10;

int main()
{
    cout << A::ci ;
    return 0;
}
编译并无问题,运行会报错。,因为ci未定义,未分配内存,对象ci未建立成实体。
【注】对于不使用的对象(包括函数),可以只声明而不定义,当需使用的时候则需有定义,分配内存,成为实体

class A
{
public:
    static const int ci;
};
const int A::ci = 10;

int main()
{
    cout << A::ci ;
    return 0;
}
这样一切ok

vc6不支持在类定义的体内指定初始值(不是定义,虽然形式上相似,指定初始值是不分配内存的,整个类定义也并不分配内存的,在创建类对象的时候,定义类对象的时候才分配内存),
c++的标准写法

class A
{
public:
    static const int ci = 10;
};
const int A::ci 、/*= 10*/;

int main()
{
    cout << A::ci ;
    return 0;
}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/todototry/archive/2007/01/08/1476789.aspx

posted @ 2009-07-31 09:35 Myhsg 阅读(131) 评论(0) 编辑

原文地址:http://hi.baidu.com/quanhaili/blog/item/5a40ba86b37e1b22c65cc38f.html

类中的静态成员真是个让人爱恨交加的特性。我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动。
静态类成员包括静态数据成员和静态函数成员两部分。

一 静态数据成员:

类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则。同时,静态数据成员还具有以下特点:

1.静态数据成员的定义。
静态数据成员实际上是类域中的全局变量。所以,静态数据成员的定义(初始化)不应该被放在头文件中。
其定义方式与全局变量相同。举例如下:

xxx.h文件
class base{
private:
static const int _i;//声明,标准c++支持有序类型在类体中初始化,但vc6不支持。
};

xxx.cpp文件
const int base::_i=10;//定义(初始化)时不受private和protected访问限制.

注:不要试图在头文件中定义(初始化)静态数据成员。在大多数的情况下,这样做会引起重复定义这样的错误。即使加上#ifndef #define #endif或者#pragma once也不行。

2.静态数据成员被 类 的所有对象所共享,包括该类派生类的对象。即派生类对象与基类对象共享基类的静态数据成员。举例如下:
class base{
public :
static int _num;//声明
};
int base::_num=0;//静态数据成员的真正定义

class derived:public base{
};

main()
{
base a;
derived b;
a._num++;
cout<<"base class static data number _num is"<<a._num<<endl;
b._num++;
cout<<"derived class static data number _num is"<<b._num<<endl;
}
// 结果为1,2;可见派生类与基类共用一个静态数据成员。

3.静态数据成员可以成为成员函数的可选参数,而普通数据成员则不可以。举例如下:
class base{
public :
static int _staticVar;
int _var;
void foo1(int i=_staticVar);//正确,_staticVar为静态数据成员
void foo2(int i=_var);//错误,_var为普通数据成员
};

4.★静态数据成员的类型可以是所属类的类型,而普通数据成员则不可以。普通数据成员的只能声明为 所属类类型的 指针或引用。举例如下:

class base{
public :
static base _object1;//正确,静态数据成员
base _object2;//错误
base *pObject;//正确,指针
base &mObject;//正确,引用
};

5.★这个特性,我不知道是属于标准c++中的特性,还是vc6自己的特性。
静态数据成员的值在const成员函数中可以被合法的改变。举例如下:

class base{
public:
base(){_i=0;_val=0;}

mutable int _i;
static int _staticVal;
int _val;
void test() const{//const 成员函数

_i++;//正确,mutable数据成员
_staticVal++;//正确,static数据成员
_val++;//错误

}
};
int base::_staticVal=0;

二,静态成员函数
静态成员函数没有什么太多好讲的。

1.静态成员函数的地址可用普通函数指针储存,而普通成员函数地址需要用 类成员函数指针来储存。举例如下:
class base{
static int func1();
int func2();
};

int (*pf1)()=&base::func1;//普通的函数指针
int (base::*pf2)()=&base::func2;//成员函数指针


2.静态成员函数不可以调用类的非静态成员。因为静态成员函数不含this指针。

3.静态成员函数不可以同时声明为 virtual、const、volatile函数。举例如下:
class base{
virtual static void func1();//错误
static void func2() const;//错误
static void func3() volatile;//错误
};


最后要说的一点是,静态成员是可以独立访问的,也就是说,无须创建任何对象实例就可以访问。

posted @ 2009-07-31 09:34 Myhsg 阅读(8561) 评论(0) 编辑

首先从静态变量说起. C++里面静态变量有三种: 分别是外部链接性,内部链接性和无链接性.
声明外部链接的变量的方法是在代码块外面声明它. 此变量是全局变量,多文件中亦可用.
声明内部链接的变量的方法是在代码块外面声明它并加上static限定符. 此变量是全局变量,但仅在本文件中可用.
声明无链接的变量的方法是在代码块里面声明它并加上static限定符. 此变量是局部变量,但仅在本代码块中可用.
例:
#include<...........>
int global=1;   //声明外部链接的变量
static int global2    //声明内部链接的变量
int func()
{
int global=5;      //声明的内部变量和全局变量重名,调用时将会隐藏全局的global;
cout<<global;   //是内部定义的global的值而不是外面的值.
//如何引用外面的变量呢???
cout<<::global;   //可用作用域解析符(::)来说明你要输出的外面的全局变量.
static int global3;   //声明无链接的变量
}
int main()
{
extern int alobal;  //在本文件中此句可选.此句的意思为你需要引用外部的变量global;
global=8;    //直接引用全局变量.
}

在多文件系统中.另一个文件如果需要引用其它文件中的全局变量.需在代码块外加extern 声明.
例:
file1
int global=5;
......................................
file 2
extern int global;
//以后就可以引用此变量了.
..............................................................
全局变量因为容易被改变而产生一些不必要的麻烦所以一般不推荐使用. 一般用全局变是为了共享一个数据,而不能随便改动.这样可以在定义变量时加const限定符.(三楼)
定义静态变量时如果没有初始化编译器会自动初始化为0. 最后在说一下无链接性静态变量.
例:
复制内容到剪贴板
代码:
#include <iostream>
using namespace std;
void func(int n){
        if (n==3) return;
        static int staint=8;
        int autoint=8;
        cout<<++staint<<endl;
        cout<<++autoint<<endl;
        cout<<&staint<<endl;
        cout<<&autoint<<endl;
        func(++n);
}
int main()
{
        func(1);
}
输出结果:
9    //第一次被初始化为8, ++后变成9;
9    //第一次被初始化为8, ++后变成9;
0x434010  
0x23ff74
10   //第二次不会被初始化(记住: static只在定义时初始化一次), 由以前的9++后变成10;
9    //第二次被初始化为8, ++后变成9;
0x434010
0x23ff54
对于auto型变量, 函数在每次调用时产生一个随机位置与随机值.
而对于static型变量第一次被初始化后以后其位置叫不会变了.见上面输出的地址.因为地址不变其内的值也自然是以前的值了.可以用来做值的传递.


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/he3913/archive/2008/09/18/2944743.aspx

posted @ 2009-07-31 09:20 Myhsg 阅读(137) 评论(0) 编辑