精华内容
下载资源
问答
  • C++中的 ::

    万次阅读 多人点赞 2019-04-19 13:44:22
    C++中的双冒号 :: 第一种,类作用域,用来标明类的变量、函数 Human::setName(char* name); 第二种,命名空间作用域,用来注明所使用的类、函数属于哪一个命名空间的 std::cout << "Hello World" <&...

    C++中的双冒号 ::

    • 第一种,类作用域,用来标明类的变量、函数
    	Human::setName(char* name);
    
    • 第二种,命名空间作用域,用来注明所使用的类、函数属于哪一个命名空间的
    	std::cout << "Hello World" << std::endl;
    
    • 第三种,全局作用域,用来区分局部、全局的。最容易被忽视的一种,很多时候写了一个全局函数或者想要调用一个全局函数,却发现IDE或者Editor找不到该函数,原因是因为局部函数与想要调用的全局函数名字一样,然后找了很久也找不到原因,甚至放弃解决的。其实原因就是因为 【局部变量/函数】 与 【全局变量/函数】 的名字相同,IDE无法区分,这时候加上 :: 就可以调用到全局函数,访问到全局变量了。

    举个例子:

    Linux下串口打开、关闭的api

    // fcntl.h文件下的全局函数open 
    open (const char *__path, int __oflag, ...)
    
    // unistd.h文件下的全局函数
    extern int close (int __fd);
    

    由于每次找api是一件非常浪费coding时间,而且是没多大意义的事情,我现在要将这个函数封装成一个我自己的个人串口库WzSerialPort.h、WzSerialPort.cpp

    // WzSerialPort.h
    class WzSerialPort
    {
    public:
    	// ...
    	bool open();
    	void close();
    	// ...
    };
    

    注意以下的cpp文件,如果没有 :: 则会报错误,因为WzSerialPort库中有函数open和close,跟全局函数open和close名字相同,如果不做全局与局部的区分,则无法调用到全局函数

    // WzSerialPort.cpp
    bool WzSerialPort::open()
    {
    	if( ::open(portname,O_RDWR|O_NOCTTY|O_NONBLOCK) != -1 )
    		return true;
    	else
    		return false;
    }
    void WzSerialPort::close()
    {
    	::close(fd);
    }
    

    打赏二维码:
    在这里插入图片描述

    展开全文
  • C++中的string类用法简介

    万次阅读 多人点赞 2019-08-21 17:21:17
    本文主要介绍C++中的string类的常见用法。 1. 概述 string是C++标准库的一个重要的部分,主要用于字符串处理。可以使用输入输出流方式直接进行string操作,也可以通过文件等手段进行string操作。同时,C++的算法库...

    本文主要介绍C++中的string类的常见用法。

    1. 概述

    string是C++标准库的一个重要的部分,主要用于字符串处理。可以使用输入输出流方式直接进行string操作,也可以通过文件等手段进行string操作。同时,C++的算法库对string类也有着很好的支持,并且string类还和c语言的字符串之间有着良好的接口。

    2. 常见用法

    2.1 string转换为char*

    方法一:使用 c_str() 方法,代码(stringsimple.cpp)如下:

    #include <string>
    #include <iostream>
    #include <stdio.h>
    
    using namespace std;
    
    int main()
    {
        string strOutput = "Hello World";
    
        cout << "[cout] strOutput is: " << strOutput << endl;
    
        // string 转换为 char*
        const char* pszOutput = strOutput.c_str();
        
        printf("[printf] strOutput is: %s\n", pszOutput);
    
        return 0;
    }
    
    

    编译并执行上述代码,结果如下:

    上述代码执行结果说明:

    • cout 可直接输出 string 类的对象的内容;
    • 使用 c_str() 方法转换 string 类型到 char* 类型时,需要为char*添加 const 关键字;
    • printf() 函数不能直接打印 string 类的对象的内容,可以通过将 string 转换为 char* 类型,再使用 printf() 函数打印。

    2.1.1 data()方法与c_str()方法

    data()方法与c_str()方法相似,都返回 const char* 类型。两者区别和联系如下:

    • 在C++98版本中,c_str()返回 const char* 类型,返回的字符串会以空字符(null character)结尾;
    • 在C++98版本中,data()返回 const char* 类型,返回的字符串不以空字符(null character)结尾;
    • 在C++11版本中,c_str()与data()用法相同(Both string::data and string::c_str are synonyms and return the same value.)

    2.2 计算string长度、string字符串比较

    示例代码如下:

    #include <string>
    #include <iostream>
    
    #define HELLOSTR "Hello World"
    
    using namespace std;
    
    int main()
    {
        string strOutput = "Hello World";
    
        int nLen = strOutput.length();
    
        cout << "the length of strOutput is: " << nLen << endl;
    
        if (0 == strOutput.compare(HELLOSTR))
        {
            cout << "strOutput equal with macro HELLOSTR" << endl;
        }
    
        return 0;
    }

    编译并执行上述代码,结果如下:

    [root@node1 /opt/liitdar/mydemos/simples]# ./stringsimple2 
    the length of strOutput is: 11
    strOutput equal with macro HELLOSTR
    [root@node1 /opt/liitdar/mydemos/simples]# 

    上述代码执行结果说明:

    • string类型可直接使用 length() 方法计算字符串长度,该方法计算结果为字符串的实际长度,如本例中"Hello World"字符串的长度为11;
    • string类型可使用 compare(const string& str) 方法进行字符串比较。

    2.3 string对象判空

    可使用 empty() 方法对string类型的对象进行判空,如下:

        if (str2.empty())
        {
            cout << "str2 is empty." << endl;
        }
    

    2.4 char*、char[]转换为string

    将 char*、char[] 转换为 string 类型时,直接进行赋值操作,将 char*、char[] 的变量赋值给 string 对象即可。

    说明:这里所说的“赋值”操作,实际上是将 char*、char[] 定义的字符串的首地址赋值给 string 对象了。

    示例代码(stringtochar.cpp)如下:

    #include <string>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        const char* pszName = "liitdar";
        char pszCamp[] = "alliance";
    
        string strName;
        string strCamp;
    
        strName = pszName;
        strCamp = pszCamp;
    
        cout << "strName is: " << strName << endl;
        cout << "strCamp is: " << strCamp << endl;
    
        return 0;
    }

    编译并执行上述代码,结果如下:

    2.5 string类的find方法

    使用string类的find方法,在字符串中检索自字符串是否存在。

    2.5.1 用法

    用法如下:

    size_t find (const string& str, size_t pos = 0) const;
    size_t find (const char* s, size_t pos = 0) const;
    size_t find (const char* s, size_t pos, size_t n) const;
    size_t find (char c, size_t pos = 0) const;

    2.5.2 返回值

    find函数返回值:

    The position of the first character of the first match. If no matches were found, the function returns string::npos.

    size_t is an unsigned integral type (the same as member type string::size_type).

    2.5.3 示例代码

    find方法的示例代码(string_find_test1.cpp)如下:

    #include <string>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        // 待检索的字符串
        string strOutput = "|0|1|2|";
        // 需要检索的子串
        string strObj = "|1|";
    
        // 子串位于字符串中的位置
        size_t nLoc = strOutput.find(strObj);
        // 如果检索到子串在字符串中,则打印子串的位置
        if (nLoc != string::npos)
        {
            cout << "nLoc is: " << nLoc << endl;
        }
    
        return 0;
    }
    
    

    编译并执行上述代码,结果如下:

    2.6 string类的insert方法

    使用string类的insert方法,向字符串中插入字符(串)。官方的定义如下:

    Inserts additional characters into the string right before the character indicated by pos (or p).

    2.6.1 用法

    string (1) string& insert (size_t pos, const string& str);
    substring (2) string& insert (size_t pos, const string& str, size_t subpos, size_t sublen);
    c-string (3) string& insert (size_t pos, const char* s);
    buffer (4) string& insert (size_t pos, const char* s, size_t n);
    fill (5)

    string& insert (size_t pos, size_t n, char c);

    void insert (iterator p, size_t n, char c);

    single character (6) iterator insert (iterator p, char c);
    range (7)

    template <class InputIterator>

        void insert (iterator p, InputIterator first, InputIterator last);

    2.6.2 示例代码

    insert方法的示例代码(string_insert_test1.cpp)如下:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        string strDemo = "I am";
    
        strDemo.insert(4, " good.");
    
        cout << "strDemo is: " << strDemo << endl;
    
        return 0;
    }
    
    

    编译并执行上述代码,结果如下:

    2.7 int类型转为string类的方法

    这里介绍两种常见的 int 类型转换为 string 类的方法,示例代码如下:

    #include <string>
    #include <iostream>
    #include <sstream>
    
    using namespace std;
    
    int main()
    {
        // 方法1
        int nNum1 = 123;
        stringstream ss;
    
        ss << nNum1;
        string strTest1 = ss.str();
        cout << "strTest1 is: " << strTest1 << endl;
    
        /*
        string strTest2;
        strTest2 << ss;     // stringstream 未定义 << 操作符,故此句报错
        cout << "strTest2 is: " << strTest2 << endl;
        */
    
        string strTest3;
        ss >> strTest3;
        cout << "strTest3 is: " << strTest3 << endl;
    
        // 方法2
        int nNum2 = 456;
        string strTest4;
        strTest4 = to_string(nNum2);    // C++11 标准
        cout << "strTest4 is: " << strTest4 << endl;
    
        return 0;
    }
    
    

    编译并执行上述代码,结果如下:

     

    展开全文
  • c++中string的几种赋值方法

    万次阅读 2017-05-22 11:50:48
    C++中则把字符串封装成了一种数据类型string,可以直接声明变量并进行赋值等字符串操作 c++可以赋一个比现有字符更长的字符串而C不可以#include "stdafx.h" #include #include#include"string"...

    在C++中把字符串封装成了一种数据类型string,可以直接声明变量并进行赋值等操作
    c++可以赋一个比现有字符更长的字符串而C不可以

    #include "stdafx.h"
    #include
    #include
    
    #include"string" //操作字符串必须包含的头文件
    
    using namespace std;
    
    void main()
    {
    string s1 = "aaaaa";
    string s2("bbbbb");
    string s3 = s2; //通过拷贝构造函数,初始化s3
    string s4(10, 'a');
    string s5 = "hello"+"world";  //错误
    cout << "s1:" << s1 << endl;
    cout << "s2:" << s2 << endl;
    cout << "s3:" << s3 << endl;
    cout << "s4:" << s4 << endl;
    
    return ;
    }
    

    c++中string的常用操作

    s.empty() 若s为空串,则返回true,否则返回false

    s.size()		返回s中字符的个数
    s[n]			返回s中位置为n的字符
    s1+s2			两个字符串连接
    s1=s2			用s2替换s1
    v1==v2	     	判断是否相等
    v1!=v2			判断是否不相等
    
    展开全文
  • c++中auto

    万次阅读 多人点赞 2019-05-11 12:00:51
    在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量 C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的...

    auto

    在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量
    C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。
    语法糖:
    简单的识别变量类型
    在这里插入图片描述
    在这里插入图片描述
    这个还不能体现出 auto 的真正意义. 但是当类型名过长时, auto 的作用就发挥出来了.
    :使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto的实际类型。因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译期会将auto替换为变量实际的类型。
    auto迭代:
    对于一个有范围的集合而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。因此C++11中引入了基于范围的for循环。for循环后的括号由冒号“ :”分为两部分:第一部分是范围内用于迭代的变量,第二
    部分则表示被迭代的范围
    在这里插入图片描述
    在这里插入图片描述
    但是这样不会对原数组 a 造成影响
    在这里插入图片描述
    在这里插入图片描述
    auto& 可以对数组 a 中的元素进行修改.
    auto特性:
    1.auto不能作为函数参数
    2.auto不能直接声明数组
    3. 为了避免与C++98中的auto发生混淆,C++11只保留了auto作为类型指示符的用法
    4. auto在实际中最常见的优势用法就是跟以后会讲到的C++11提供的新式for循环,还有lambda表达式等进行配合使用。
    5. auto不能定义类的非静态成员变量
    6. 实例化模板时不能使用auto作为模板参数

    展开全文
  • C++中find函数用法

    万次阅读 多人点赞 2017-03-16 16:40:48
    C++中STL里提供了许多字符串操作的函数,下面是字符串查找方面的部分函数用法简介: 1.find() 查找第一次出现的目标字符串: #include&lt;iostream&gt; #include&lt;cstdio&gt; using ...
  • c++中 ->,c++中::

    万次阅读 多人点赞 2019-08-16 14:31:30
    // 对结构体的成员变量gold进行赋值 } :: 调用变量 作用域::变量 如果a的作用域为全局作用域,调用a时用 ::a 如果a的作用域为类ww时,调用a时用 class ww { public: int a(); } int ww::a()//表示a是属于ww的 { ...
  • C++中的bool类型

    万次阅读 多人点赞 2019-07-12 11:06:40
    学过C语言的程序员应该清楚,在C语言中,是没有bool这个基础类型的。...在C++中,虽然布尔类型只表示true和false,看起来好像可以用一个位来存储布尔类型的变量,但其实,布尔类型在C++中是占用一个...
  • C++中setw()函数

    万次阅读 多人点赞 2019-03-07 14:20:22
    setw(int n)是c++中在输出操作中使用的字段宽度设置,设置输出的域宽,n表示字段宽度。只对紧接着的输出有效,紧接着的输出结束后又变回默认的域宽。 当后面紧跟着的输出字段长度小于n的时候,在该字段前面用空格补...
  • c++中nullptr

    万次阅读 多人点赞 2019-05-04 16:12:40
    C++中为了避免“野指针”(即指针在首次使用之前没有进行初始化)的出现,我们声明一个指针后最好马上对其进行初始化操作。如果暂时不明确该指针指向哪个变量,则需要赋予NULL值。除了NULL之外,C++11新标准中又引入...
  • c++中vector find使用

    万次阅读 多人点赞 2017-03-25 16:45:12
    c++中vector find使用
  • C++中rand()函数的用法

    万次阅读 多人点赞 2017-01-18 10:56:31
    C++中rand()函数的用法
  • C++中NULL和nullptr的区别

    万次阅读 多人点赞 2018-11-22 19:14:39
    在编写C程序的时候只看到过NULL,而在C++的编程中,我们可以看到NULL和nullptr两种关键字,其实nullptr是C++11版本中新加入的,它的出现是为了解决NULL表示空指针在C++中具有二义性的问题,为了弄明白这个问题,我...
  • C++中的函数签名

    万次阅读 2018-01-22 21:17:57
    C++中的函数签名
  • C++中的using namespace std的作用

    万次阅读 多人点赞 2018-09-09 20:19:54
    C++中的using namespace std的作用  所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。  iostream和iostream.h的区别:  后缀为.h的头文件C++标注...
  • C++中string转int

    万次阅读 多人点赞 2017-03-14 10:58:38
    C++中实现string转int
  • C++中的复数

    万次阅读 2017-04-27 19:30:33
    C++中的复数   C++中的复数操作在C语言基础上引进了面向对象的特性,在 C++ 头文件在 complex 中定义了一个 complex 类用来表示复数。同时为了兼容 C 的 complex 类型,也提供了一个 complex.h 的头文件。 不同的...
  • C++中explicit的用法

    万次阅读 多人点赞 2017-02-27 18:14:42
    C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色。  1 是个构造;2 是个默认且隐含的类型转换操作符。 所以, 有时候在我们写下如 AAA = XXX, 这样的代码, ...
  • C++中的var类型

    千次阅读 2020-01-08 11:43:29
    C++中的var类型 C++中的var类型不同于其他的常见类型,其他的类型例如int、float、char等类型需要自己知道数据的类型,再根据需要定于,而var类型可以根据你赋值的类型来确定变量的类型:例如: var a = 10,则a是...
  • C++中的swap函数

    万次阅读 多人点赞 2019-08-10 09:23:32
    C++中的swap函数:交换函数 好处:不用担心交换变量精度的缺失,无需构造临时变量,不会增加空间复杂度 swap 包含在命名空间std 里面 swap(a,b);(交换两个数) swap(a[i] = b[j]);(交换两个位置上的变量) ....
  • C++中数组的赋值方法

    万次阅读 2018-08-17 13:07:55
    C++中,如果一个数组被定义在类中,那么它的赋值方法和通常的面向过程中的复制方法是不一样的。不能再定义数组的时候同时给数组赋值,也不能再构造函数中直接利用等式对数组进行赋值。 一种办法如下:
  • C++中getchar()的使用方法

    万次阅读 多人点赞 2018-06-20 09:47:25
    1 getchar()简介getchar()是C语言中的函数,C++中也包含了该函数。getchar()函数的作用是从标准的输入stdin中读取字符。也就是说,getchar()函数以字符为单位对输入的数据进行读取。2 getchar()读取缓冲区方式在...
  • C++中delete函数

    千次阅读 2019-07-31 17:21:33
    C++中delete函数用于回收new分配的内存空间。 C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。 关于 new[] 和 delete[],其中又...
  • C++中关于显示中文乱码的问题

    千次阅读 2019-03-19 14:20:59
    C++中存在中文乱码的问题,一般在进行显示一些中文或者是特殊字符时,会有这种现象,特殊字符譬如"λ", “φ”…等 解决方案 在.h文件中加上如下声明 #pragma execution_character_set("utf-8") ...
  • C++中 float 精度详解

    千次阅读 多人点赞 2018-10-24 22:15:48
    关于C和C++中的基本数据类型int、long、long long、float、double、char、string的大小及表示范围 c++中float精度问题 原码、反码与补码 分析 一个浮点数(Floating Point Number)由三个基本成分构成: 符号...
  • c++中byte[]转string。实现函数。不是转成16进制的string,而是包含中英文的string.
  • 【C++】C++中函数重载的理解

    万次阅读 多人点赞 2018-06-19 17:37:05
    我们在平时写代码会用到几个函数但是他们的实现功能相同,但是有些细节却不同。例如:交换两个数的值其中包括(int, float,char,double)这些个类型。在C语言我们是利用不同的函数名来加以区分。void Swap1(int* ...
  • C++中的register变量

    千次阅读 2017-02-14 08:49:33
    C++中的register变量
  • c++中的byte类型

    万次阅读 2018-11-15 07:42:52
    c++中没有byte类型,替代的方法是使用unsigned char a[3],可以当作字节数组使用  
  • tip1:C++中取余运算

    千次阅读 2020-10-23 00:19:39
    一、C++中的整数除法 C++中整数除法和取余用的是truncate除法(舍0取整),而给无符号类型赋值超出表示范围时候用无符号类型等于赋值对无符号类型可以表示的数值总数取余,智力的取余是基于floor除法的(向下取整)...
  • C/C++中*和&的用法

    万次阅读 多人点赞 2017-06-17 23:27:36
    C++中*与&的用法的简单总结。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,520,643
精华内容 1,408,257
关键字:

c++中

c++ 订阅