C++入门(一)Hello world

138 阅读2分钟

编译工具

  • Windows端:Microsoft Visual Studio
  • Mac端:XCode image.png

Hello World

//
//  main.cpp
//  CPPLearn
//
//  Created by curry on 2023/2/5.
//  新建项目默认生成的代码
#include <iostream>
int main(int argc, const char * argv[]) {
    // insert code here...
    std::cout << "Hello, World!\n";
    return 0;
}

// 另一种写法
#include <iostream>
using namespace std;
int main(){
    cout << "Hello, world!" << endl;
    return 0;
}

// 使用 printf() 进行输出

问题:

1. std是什么?

std是系统标准(standard)的命名空间。

2. std::cout代表什么?

::在 C++ 中表示作用域和所属关系。::是运算符中等级最高的,它分为三种,分别如下:
一、作用域符号:
作用域符号::的前面一般是类名称,后面一般是该类的成员名称,C++ 为例避免不同的类有名称相同的成员而采用作用域的方式进行区分。
二、全局作用域符号:
全局作用域符号:当全局变量在局部函数中与其中某个变量重名,那么就可以用::来区分,例如: C++ char z; //全局变量 void test() { char z = ::z(全局变量) // 可以理解为Java类中的 this.xxx }
三、作用域分解运算符:
::是 C++里的作用域分解运算符,“比如声明了一个类 A,类 A 里声明了一个成员函数 void b(),但没有在类的声明里给出f的定义,那么在类外定义b时,就要写成 voidA::b(),表示这个b() 函数是类A的成员函数。例如: ```C++ class A { public: void b(); }

void A::b(){}
```  

3. << 代表什么?( >> )

在C++里面,<< 与 cout配合 当作"输出"运算符。 >> 与 cin配合 当作"输入"运算符。
运算符重载

4. using namespace std; 含义?

可以理解成Java中的import com.android.xxx

声明一个命名空间,在多人合作时,即使有函数同名了,但是因为所在的命名空间不同,也不会导致出现错误。

真正的开发过程中, 尽量避免使用using namespace std;等直接引入整个命名空间,否则会因为命名空间污染导致很多不必要的问题;比如自己写的某个函数,名称正好和 std 中的一样, 编译器会不知道使用哪一个,引起编译报错,建议使用std::cout等直接由命名空间组合起来的全称。

5. 两种写法区别?

在 C++ 中,终端输出换行时,用 cout<<......<<endl 与"\n"都可以。但用endl会写'\n',会调用 flush 函数,刷新缓冲区,使得栈中的东西刷新一次;

    std::cout << std::endl; // std::endl是一个函数
    相当于:
    std::cout << '\n' << std::flush;
    或者
    std::cout << '\n'; std::fflush(stdout);

但用 "\n" 不会刷新,它只会换行,栈内数据没有变化。考虑效率就用 '\n'。
在没有必要刷新输出流的时候应尽量使用 cout << '\n', 过多的 endl 是影响程序执行效率低下的因素之一。