【explicit】
只对构造函数起作用,用来抑制隐式转换。
【成员模板函数 member template function】
template <typename OutStream>
class PrintIt {
public:
PrintIt( OutStream &os )
: _os( os ){}
template <typename elemType>
void print( const elemType &elem, char delimiter = '\n' )
{ _os << elem << delimiter; }
private:
ostream& _os;
};
//Here is our modified program:
int main()
{
PrintIt<ostream> to_standard_out( cout );
to_standard_out.print( "hello" );
to_standard_out.print( 1024 );
string my_string( "i am a string" );
to_standard_out.print( my_string );
}
【模板参数推导 template argument deduction】
利用函数模板(function template)的参数推导(argument deduction)机制,获取迭代器指向对象的类型。
template <class I, class T>
void fun_impl(I iter, T t){ // 此处该函数利用模板参数推导得知T为*iter类型
T tmp; // 可以声明变量
//...
};
template <class I>
inline void fun(I iter){
fun_impl(iter, *iter); //此处把*iter作为第二个参数传递给fun_impl()
}
int main(int argc, char *argv[])
{
int i;
fun(&i);
return 0;
}
【ptrdiff_t】
ptrdiff_t是C/C++标准库中定义的一个与机器相关的数据类型。ptrdiff_t类型变量通常用来保存两个指针减法操作的结果。
ptrdiff_t定义在stddef.h(cstddef)这个文件内。ptrdiff_t通常被定义为long int类型。
ptrdiff_t定义在C99标准中。
【定位放置new(placement new)】
最简单的用处就是将对象 放置在内存中的特殊位置。这是依靠 new表达式部分的指针参数的位置来完成的:
#include <new> // 必须 #include 这个,才能使用 "placement new"
#include "Fred.h" // class Fred 的声明
void someCode()
{
char memory[sizeof(Fred)]; // Line #1
void* place = memory; // Line #2
Fred* f = new(place) Fred(); // Line #3 (详见以下的“危险”)
// The pointers f and place will be equal
// ...
}
【static_cast】
static_cast < type-id > ( expression )
该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。
【volatile】
volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.
【scanf中的正则表达式】
定制自己的扫描集%[abc]、%[a-z]、%[^abc]、%[^a-z] 。
【geteuid()】
geteuid()用来取得执行目前进程有效的用户识别码。有效的用户识别码用来决定进程执行的权限。
【getopt()】
getopt()用来分析命令行参数。 #include<unistd.h>
【signal】
表头文件#include<signal.h>
功 能:设置某一信号的对应动作
函数原型:void (*signal(int signum,void(* handler)(int)))(int);
或者:typedef void(*sig_t) ( int );
sig_t signal(int signum,sig_t handler);
参数说明:
第一个参数signum指明了所要处理的信号类型,它可以取除了SIGKILL和SIGSTOP外的任何一种信号。
第二个参数handler描述了与信号关联的动作,它可以取以下三种值:
(1)一个无返回值的函数地址
此函数必须在signal()被调用前申明,handler中为这个函数的名字。当接收到一个类型为sig的信号时,就执行handler 所指定的函数。这个函数应有如下形式的定义:
void func(int sig);
(2)SIG_IGN
这个符号表示忽略该信号,执行了相应的signal()调用后,进程会忽略类型为sig的信号。
(3)SIG_DFL
这个符号表示恢复系统对信号的默认处理。
【waitpid()】
waitpid()会暂时停止目前进程的执行,直到有信号来到或子进程结束。
【execvp】
表头文件:
#include<unistd.h>
定义函数:
int execvp(const char *file ,char * const argv []);
函数说明:
execvp()会从PATH 环境变量所指的目录中查找符合参数file 的文件名,找到后便执行该文件,然后将第二个参数argv传给该欲执行的文件。
返回值:
如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。