美文网首页c/c++
c++基础-异常处理和字符串操作

c++基础-异常处理和字符串操作

作者: Peakmain | 来源:发表于2019-02-25 22:00 被阅读13次

类型转换

  • 1 static_cast 静态转换 用于基本数据类型之间的转换,如把int转换成char
  • 2 const_cast 常量转换 用于修改常量的值
  • 3 reinterpret_cat 强制类型转换 ,用于转换任意类型
  • 4 dynamic_cast 动态转换 ,更安全,转换成功返回类型,失败返回空 ,必须要包含多态类型和 static_cast 很类似,但是更安全

Native层实现System.arrayCopy()方法

Java_com_peakmain_myapplication_MainActivity_arraycopy(JNIEnv *env, jclass type, jobject src,
                                                       jint srcPos, jobject dest, jint destPos,
                                                       jint length) {
    //判断是否是数组
    //都是数组,需要类型转换
    jobjectArray src_array = reinterpret_cast<jobjectArray>(src);
    jobjectArray dest_array = reinterpret_cast<jobjectArray>(dest);
    if (src_array != NULL && dest_array != NULL) {
        __android_log_print(ANDROID_LOG_ERROR, "TAG", "转换成功");
        for (int i = srcPos; i < srcPos + length; ++i) {
            jobject obj = env->GetObjectArrayElement(src_array, i);
            //放到新的数组里面
            env->SetObjectArrayElement(dest_array,i,obj);
        }
    }

调用

  static {
        System.loadLibrary("native-lib");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Person[] person1 = new Person[10];
        for (int i = 0; i < person1.length; i++) {
            person1[i] = new Person("Peakmain", 20 + i);
        }
        Person[] person2 = new Person[10];
        arraycopy(person1, 0, person2, 0, person1.length);
        for (Person person : person2) {
            Log.e("TAG", person.age + "");
        }
    }

    public static native void arraycopy(Object src, int srcPos,
                                        Object dest, int destPos,
                                        int length);

c++中异常处理

自定义异常

class Exception{
public:
    string msg;
public:
    Exception(string msg){
        this->msg = msg;
    }
public :
    const char*what(){
        return this->msg.c_str;
    }
};
void main(){
    // c++ 中有自己一套异常的体系,不要去强记
    // 但是 c++ 可以抛任何数据类型 try{}catch(数据类型 变量名){}
    // throw 抛异常
    try{
        int i = -1;

        if (i == 0){
            throw Exception("出异常了");
        }

        if (i < 0){
            throw 11.8f;
        }
    }
    catch (int number){
        cout << "捕捉到异常" << number << endl;
    }
    catch (Exception exception){
        cout << "捕捉到异常:" << exception.what() << endl;
    }
    catch (...){
        cout << "捕捉到其他异常:" << endl;
    }
    getchar();
}

NDK 异常总结

  1. 在 c++ 层如果是自己写的代码或者调用别人的方法抛出异常,记得要 try , 如果不 try 在 java 层 try 是没有意义的
  2. 如果异常需要往外抛给 java 层,一定要按照java层抛异常的方式
  3. 如果是自己写的 NDK 层的代码,最好抛自己写的异常,声明异常
  4. 如果是做 c++/c , 或者是帮 c/c++ 写代码,最好抛系统定义好的异常或者继承系统的异常
  5. 系统异常的体系 参看文章

字符串操作

对象的操作

string str1 = "123";
string str2("123");
string str3(5, 'A');// 实际是5 个 A = AAAAA
string *str4 = new string("123");

string 与 char* 相互之间转换 c_str()

//string->char*
const char* c_str1 = str1.c_str();
//char*->string
char*c_str = "Peakmain";
string str(c_str);
cout << str.c_str() << endl;

相关文章

  • c++基础-异常处理和字符串操作

    类型转换 1 static_cast 静态转换 用于基本数据类型之间的转换,如把int转换成char 2 con...

  • go基本语法操作

    异常处理 异常类型error 异常捕获recover 异常抛出panic 字符串处理 字符串常用操作 正则表达式 ...

  • (五)C++中的异常处理与模板类

    C++中的异常处理与模板类 一、C++ 中的异常处理 1、异常处理 在C++ 中可以抛出任何类型的异常,根据抛出的...

  • iOS--基础1

    异常处理--Exception Handling Objective-C语言具有类似于Java和c++的异常处理...

  • 你的c++团队还在禁用异常处理吗?

    关于c++的异常处理,网上有很多的争议,本文会介绍c++的异常处理的使用,以及我们应该使用异常处理吗,以及使用异常...

  • Android NDK开发之旅23--C++--异常处理

    异常处理 与Java类似,C++也有异常处理。 异常类型 C++中,异常的类型是任意的,如下: throw不同类型...

  • J S

    导入 1 基础语法 2 DOM操作(必须会 熟练操作 ) 3 日期对象 字符串处理 数组处理正侧 -------...

  • 从C到C++

    C++语言是以C语言为基础,对C语言进行了加强,如类型加强,函数加强和异常处理,最重要的是,C++加入了面向对象支...

  • JavaSE 基础学习之五 —— IO 操作 (java. io

    接上篇《JavaSE 基础学习之四 —— 异常的处理》 五. JavaSE 基础学习 —— IO 操作 (java...

  • 异常( Exceptions)

    异常处理是C++的一项语言机制,用于在程序中处理异常事件。异常事件在C++中表示为异常对象。 优点: 异常允许上层...

网友评论

    本文标题:c++基础-异常处理和字符串操作

    本文链接:https://www.haomeiwen.com/subject/pudnyqtx.html