C++语法笔记

【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中。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值