编译工具
- Windows端:Microsoft Visual Studio
- Mac端:XCode
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 是影响程序执行效率低下的因素之一。