c++中一些小细节

1-

"\n"表示一个字符串,只有一个数据是回车。
'\n'表示一个字符。
这两个在输出上是一样的!

2-

关于endl;
a.在 C++ 中,终端输出换行时,用 cout<<…<<endl 与 “\n” 都可以,这是初级的认识。但二者有小小的区别,用 endl 时会刷新缓冲区,使得栈中的东西刷新一次,但用 “\n” 不会刷新,它只会换行,盏内数据没有变化。但一般情况,二者的这点区别是很小的,在大的程序中可能会用到。建议用 endl 来换行。

b.endl 除了写 ‘\n’ 进外,还调用 flush 函数,刷新缓冲区,把缓冲区里的数据写入文件或屏幕.考虑效率就用 ‘\n’。

cout << endl; 

等价于:

\cout << '\n' << flush;

在没有必要刷新输出流的时候应尽量使用 cout << ‘\n’, 过多的 endl 是影响程序执行效率低下的因素之一。

3-

如果想显示多行文本,如下:

#include <iostream>
using namespace std;
int main()
{
    cout<<"...............\n"
        <<"Hello, world!\n"
    <<"Welcome to c++\n"
        <<"...............\n";
    return 0;
}

不用一直这样 cout 多行插入。

4-

C++ 中 using namespace std 到底是什么意思?
声明一个命名空间的意思。命名空间在多人合作的时候很有用,因为你定义了变量 a,别人也定义了变量 a,这样就重复定义了。如果你在自己的命名空间中定义了 a,别人在别人的命名空间中定义了 a,这样就不重复了,比如:

using namespace xx;
using namespace yy;
xx::a 和 yy::a 虽然都叫 a,但是不是同一个变量。

std 是系统标准的命名空间,为了和用户定义的名字不重复,所以它声明在 std 这个命名空间中。另外,这个空间也像一个大包一样,包括了系统所有的支持。

5-

C/C++可以使用带有 $ 的标识符:

#include "stdio.h"

int main(){
        int _2a$=0x99;
        printf("%d\n",_2a$);
        return 0;
}

6-

在 C++ 中 main 函数前面为什么要加上数据类型,比如: int void ?
main 函数的返回值是返回给主调进程,使主调进程得知被调用程序的运行结果。

标准规范中规定 main 函数的返回值为 int,一般约定返回 0 值时代表程序运行无错误,其它值均为错误号,但该约定并非强制。

如果程序的运行结果不需要返回给主调进程,或程序开发人员确认该状态并不重要,比如所有出错信息均在程序中有明确提示的情况下,可以不写 main 函数的返回值。在一些检查不是很严格的编译器中,比如 VC, VS 等,void 类型的 main 是允许的。不过在一些检查严格的编译器下,比如 g++, 则要求 main 函数的返回值必须为 int 型。

所以在编程时,区分程序运行结果并以 int 型返回,是一个良好的编程习惯。

7-

C 语言 int main() 和 int main(void) 的区别?

int main(void) 指的是此函数的参数为空,不能传入参数,如果你传入参数,就会出错。

int main() 表示可以传入参数。

// 这样是正确的
int main()
{
  if (0) main(42);
}

// 这样会出错
int main(void)
{
  if (0) main(42);
}

在 C++ 中 int main() 和 int main(void) 是等效的,但在 C 中让括号空着代表编译器对是否接受参数保持沉默。在 C 语言中 main() 省略返回类型也就相当说明返回类型为 int 型,不过这种用法在 C++ 中逐渐被淘汰。虽然 void main()在很多系统都适用,但他毕竟不是标准的,所以应该避免这种用法, 应该使用这种 int main(void) 的写法比较妥当。

8-

下表显示了各种变量类型在内存中存储值时需要占用的内存,以及该类型的变量所能存储的最大值和最小值。

注意:不同系统会有所差异。

类型 位 范围

char 1 个字节 -128 到 127 或者 0 到 255 unsigned char 1 个字节 0 到 255 signed

char 1 个字节 -128 到 127 int 4 个字节 -2147483648 到 2147483647 unsigned
int 4 个字节 0 到 4294967295 signed int 4 个字节 -2147483648 到 2147483647
short int 2 个字节 -32768 到 32767 unsigned short int 2 个字节 0 到 65,535
signed short int 2 个字节 -32768 到 32767 long int 8
个字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 signed long
int 8 个字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long int 8 个字节 0 到 18,446,744,073,709,551,615 float 4
个字节 精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字) double 8 个字节 双精度型占8
个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字) long double 16 个字节 长双精度型 16
个字节(128位)内存空间,可提供18-19位有效数字。 wchar_t 2 或 4 个字节 1 个宽字符

从上表可得知,变量的大小会根据编译器和所使用的电脑而有所不同。

可以使用sizeof()函数来获取各数据类型的大小

9-

关于 typedef 的几点说明:

typedef 可以声明各种类型名,但不能用来定义变量。用 typedef 可以声明数组类型、字符串类型,使用比较方便。
用typedef只是对已经存在的类型增加一个类型名,而没有创造新的类型。
当在不同源文件中用到同一类型数据(尤其是像数组、指针、结构体、共用体等类型数据)时,常用 typedef 声明一些数据类型,把它们单独放在一个头文件中,然后在需要用到它们的文件中用 #include 命令把它们包含进来,以提高编程效率。
使用 typedef 有利于程序的通用与移植。有时程序会依赖于硬件特性,用 typedef 便于移植。

猜你喜欢

转载自blog.csdn.net/qq_24654501/article/details/105396703