知识点扫盲

来源:互联网 发布:提高智商知乎 编辑:程序博客网 时间:2024/06/11 20:59

1.explicit:

C++中, 单参数构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色。 1 是个构造器 ,2 是个默认且隐含的类型转换操作符。

class Test1
{
public:
    Test1(int n)
    {
        num=n;
    }//普通构造函数
private:
    int num;
};
class Test2
{
public:
    explicit Test2(int n)
    {
        num=n;
    }//explicit(显式)构造函数
private:
    int num;
};
int main()
{
    Test1 t1=12;//隐式调用其构造函数,成功
    Test2 t2=12;//编译错误,不能隐式调用其构造函数
    Test2 t2(12);//显式调用成功
    return 0;
}

explict 为程序员提供一种方法,使得他们能够制止“单一参数的构造函数被当做一个conversion运算符”;

如:cin.operator int();

2..suo文件

suo(solution user options)是一种文件的格式。*.suo 解决方案用户选项,记录所有将与解决方案建立关联的选项,以便在每次打开时,它都包含用户所做的自定义设置。比如VS布局以及项目最后编译的而又没有关掉的文件用于下次打开时用。
  其中,VS布局包括:监视器1234的变量列表、断点标记及开关状态、输出窗口错误窗口等的分布及其悬浮状态,还有项目卸载状态标记。
  .suo文件偶尔会被破坏,从而在构建和编辑应用程序时出现意想不到的结果。如果Visual Studio对于每个解决方案不稳定,就应删除.suo文件。下次打开解决方案时,Visual Studio会重建它。

3用C++流成员函数put输出单个字符

在程序中一般用cout和插入运算符“<<”实现输出,cout流在内存中有相应的缓冲区。有时用户还有特殊的输出要求,例如只输出一个字符。ostream类除了提供上面介绍过的用于格式控制的成员函数外,还提供了专用于输出单个字符的成员函数put。如:
    cout.put('a');
调用该函数的结果是在屏幕上显示一个字符a。put函数的参数可以是字符或字符的ASCII代码(也可以是一个整型表达式)。如
    cout.put(65 + 32);
也显示字符a,因为97是字符a的ASCII代码。


可以在一个语句中连续调用put函数。如:
    cout.put(71).put(79).put(79). put(68).put('\n');
在屏幕上显示GOOD。

http://c.biancheng.net/cpp/biancheng/view/254.html

4.C++中ends和flush

ends函数 终止字符串
flush函数 刷新缓冲区
endl函数 终止一行并刷新缓冲区

http://blog.163.com/muren20062094@yeah/blog/static/1618444162011643389915/

5. qDebug

qDebug() << strError;     //输出

http://blog.csdn.net/dbzhang800/article/details/6460229

此篇博文还有很多没有看懂之处

<<有两个用处一是输出;二是右移位运算符

<<(左移)、>>(带符号右移)和>>>(无符号右移)

6.左值与右值

lvalue 就是 left value 左值
rvalue 就是 right value 右值
 
之所以叫这么个名字, 是因为 左值 可以放在 = 的左边, 而右值不可以.
 
int a;
const int b = 3;
 
a = 10; // a可以放在=的左边, 也就是说可以赋值, 那么就是"左值"
b = 10; // const 类型不可以赋值, 也就是说不可以放在=的左边, 所以是"右值"
 
左值包括所有的 "非const" 变量.
右值包括所有"不能赋值"的东西, 包括const 变量, 临时变量, 常数等等.
 
b+c 返回临时对象, 右值, 所以你不可以 b+c = x;
++a 前 ++和--都返回本身的引用, 属于左值, 所以可以(++a) = x; 虽然这么写没有意义.
a++ 后 ++和--都返回临时变量, 是"右值"
 
是左值还是右值, 只要看他能不能被赋值就可以了.
至于const对象, 你非要用强制类型转换让他变成左值也不是不可以..

lvalue:指的是内存中持续存储数据的一个地址。
rvalue:临时存储的表达式结果。
以下三个表达式:
 a=b+c;
 b=++a;
 c=a++;
其中:语句1:表达式"b+c"是一个rvalue.
  语句2:表达式"++a"是一个lvalue;
  语句3:表达式"a++"是一个rvalue;

7.&&

c++中也会用&&来指定一个rvalue的引用类型。//右值引用

例如:int && ex_1=2*x+3
在这里rvalue初始化表达式为引用表达式2*x+3的值,它是一个临时值,即rvalue。lvalue则不能这么做。但在函数中它的作用才凸显出来,它可以完成引用形参类型,能够使表达式作为实参来调用函数。如果直接用lvalue则不能这么做。
c语言中&&是一种双目运算符,表示与运算,而当左边所给表达式或变量为0时,不再计算右侧,整个表达式为零。

&是位与,两边是两个数 如: 3&5 结果是1, 3&7结果是3
&&是逻辑与,两边是两个逻辑表达式 如: 1<3 && 2<3 结果是1,1>3 && 2<3 结果是0

0 0