Updates from 六月, 2015 Toggle Comment Threads | 键盘快捷键

  • jinzihao am8:37 on 2015年6月29日 链接地址 | 回复  

    C++编译时遇到multiple definition问题,可以把被多次定义的代码部分放在一个匿名命名空间(namespace)中,如:

    namespace {
    class A {
    ...
    };
    ...
    }
    
     
  • jinzihao pm12:30 on 2015年6月19日 链接地址 | 回复  

    运算符重载作为成员函数时,如果没有参数(即()),则类的对象本身作为右参数;如果有一个参数(如(int a)),则类的对象变为左参数,函数唯一的参数a变为右参数。因此,如果需要指定左参数的类型(如<< >>分别需要ostream和istream类型的左参数),必须改用友员函数(成员函数)的方式重载该运算符

     
  • jinzihao am11:05 on 2015年6月19日 链接地址 | 回复  

    两个版本的++运算符重载,int operator++()用于++i,int operator++(int)用于i++。此处i++中的++实际上是一个二元运算符,只是第二个参数被忽略掉了。
    C++并没有后置的一元运算符,所谓i++实际上是忽略了第二个参数的二元运算符。一元运算符均为!i, -i, ++i这样的形式。

    #include 
    using namespace std;
    class A {
    public:
    	A() : value(0) {} 
    	A(int x) : value(x) {}
    	int operator++() {
    		++value;
    		return value;
    	}
    	int operator++(int) {
    		value++;
    		return value - 1;
    	}
    private:
    	int value; 
    };
    
    int main() {
    	A a(10);
    	A b(10);
    	cout << ++a << endl;
    	cout << b++ << endl; 
    }
    
     
  • jinzihao pm11:27 on 2015年6月18日 链接地址 | 回复  

    派生类在构造函数被调用之前会先调用基类的构造函数。特别地,如果派生类的带参数的构造函数被调用,编译器默认会先让程序调用基类不带参数的构造函数,有可能造成不希望的效果。这时需要在派生类的构造函数的初始化列表里显式地、带参数地初始化基类
    Code:

    #include 
    using namespace std;
    
    class A {
    public:
    	A() {
    		cout << "A()" << endl; 
    	}
    	A(int x) {
    		cout << "A(int)" << endl;	
    	}
    };
    
    class B : public A {
    public:
    	B() {
    		cout << "B()" << endl;
    	}
    	B(int x) : A(x) {
    		cout << "B(int)" << endl;	
    	}
    };
    
    int main() {
    	B b1;
    	B b2(10);
    	return 0;
    }
    

    Output:

    A();
    B();
    A(int);
    B(int);
    
     
  • jinzihao pm7:19 on 2015年6月15日 链接地址 | 回复  

    C++的(a, b, c, …, n)有个奇特的用法:输出括号中最后一个数,不知道为什么这样设计…

    #include 
    using namespace std;
    
    int func0() {
    	cout << "[func0]";	
    	return 0;
    }
    
    int func1() {
    	cout << "[func1]";	
    	return 1;
    }
    
    int func2() {
    	cout << "[func2]";	
    	return 2;
    }
    
    int main() {
    	cout << (func2(), func1(), func0()) << endl;
    	cout << (func0() && func1() && func2()) << endl;
    	return 0;
    }
    
     
  • jinzihao pm3:56 on 2015年6月15日 链接地址 | 回复  

    在apache的rewrite规则部分加一行RewriteCond语句,可以在rewrite时忽略某个目录,从而可以在WordPress目录下放置其他网页:

    ......
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !^/proxy/
    RewriteRule . /index.php [L]
    
    
    # END WordPress
    
     
  • jinzihao pm2:19 on 2015年6月4日 链接地址 | 回复  

    在Windows上使用gcc/g++的-o指定输出文件时,可以不加.exe的后缀,编译器会自动添加.exe扩展名。因此在编写Makefile时此处不必针对Windows做修改。

     
  • jinzihao pm12:12 on 2015年6月4日 链接地址 | 回复  

    有些代码中会出现一个“魔数”1e9 + 7 (1000000007),是一个防止溢出的取模运算常用的大质数;另外13331也常在hash函数中用来取模

     
c
写新的
j
下一篇文章/下一个回复
k
前一篇文章/以前的回复
r
回复
e
编辑
o
显示/隐藏 回复
t
回到顶部
l
go to login
h
show/hide help
shift + esc
取消