一 基础理解
char *my_strcpy(char *dest, const char* src) noexcept
它是函数提供者和使用者的一种君子协定,没有加noexcept标明该函数不抛出任何异常。
之所以说是君子协定,是因为实际上内部实现是需要人肉确保。
如果一个标明throw()的函数内部发生了throw:
1,如果内部直接throw something,编译器会发现并指出;
- 如果是内部调用了一个可能throw something的函数,编译器无法发现,运行时一旦这个内部的函数throw,程序会abort。
func() throw(type) ,会抛出某种异常
func() throw(),不会抛出
func() throw(…),可能是任何类型的异常
c++11 上把throw()换成noexcept
二:程序解析
#include<iostream>
using namespace std;
char *my_strcpy(char *dest, const char* src) noexcept
{
try{
if(dest == NULL || src == NULL)
// return NULL;
throw "err point";
}catch(const char *err){
cout<<err<<endl;
return NULL;
}
char * t = dest;
while(*dest++ = *src++);
return t;
}
int main()
{
char p[] ="123";
char q[] ="456";
char * s=NULL;
cout<<my_strcpy(q,s)<<endl;
return 0;
}