本 Wiki 开启了 HTTPS。但由于同 IP 的 Blog 也开启了 HTTPS,因此本站必须要支持 SNI 的浏览器才能浏览。为了兼容一部分浏览器,本站保留了 HTTP 作为兼容。如果您的浏览器支持 SNI,请尽量通过 HTTPS 访问本站,谢谢!
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
cs:programming:cpp:courses:cpp_basic_deep:chpt_1 [2024/04/13 13:33] – [Iostream] codinghare | cs:programming:cpp:courses:cpp_basic_deep:chpt_1 [2024/08/11 03:32] (当前版本) – [系统 IO] codinghare | ||
---|---|---|---|
行 60: | 行 60: | ||
* 注释:单行,多行 | * 注释:单行,多行 | ||
====系统 IO==== | ====系统 IO==== | ||
- | </code cpp> | + | <code cpp> |
// 定义于 iostream 中 | // 定义于 iostream 中 | ||
// 如果使用双引号,系统会在当前目录中找 | // 如果使用双引号,系统会在当前目录中找 | ||
行 72: | 行 72: | ||
* 输出流:'' | * 输出流:'' | ||
* '' | * '' | ||
- | <code bash>$main > OutputText 2> | + | <code bash> |
+ | #cout 的内容会输出到 OutputText | ||
+ | #cerr 的内容会输出到 ErrorText | ||
+ | ./main > OutputText 2> | ||
+ | </ | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * 手动刷新:'' | ||
+ | |||
+ | <WRAP center round box 100%> | ||
+ | 缓冲区是内存中的一个区域,用于优化读写的速度。缓冲区满了以后,会一次性将内容输出。但问题在于,程序没有正常结束时,缓冲区中的内容会丢失。如果为了查找程序的 Bug,那么这部分内容是需要保留的。这种情况下,需要立即刷新缓冲区。 | ||
+ | </ | ||
+ | ===命名空间=== | ||
+ | 命名空间的存在是为了防止命名冲突。多人开发的过程中很可能会存在同名函数,放在一起可能会存在调用的冲突。这种情况下可以选择将其分置于不同的命名空间内: | ||
+ | <code cpp> | ||
+ | namespace NS1 { | ||
+ | void fun() { | ||
+ | std::cout << " | ||
+ | } | ||
+ | } | ||
+ | |||
+ | namespace NS2 { | ||
+ | void fun() { | ||
+ | std::cout << " | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | 没有标明命名空间的函数属于**全局空间**(// | ||
+ | <code cpp> | ||
+ | void fun() | ||
+ | { | ||
+ | std::cout << " | ||
+ | } | ||
+ | </ | ||
+ | 调用的方式有三种: | ||
+ | * ''::'' | ||
+ | <code cpp> | ||
+ | // call | ||
+ | int main(int argc, char const *argv[]) | ||
+ | { | ||
+ | NS1:: | ||
+ | NS2:: | ||
+ | } | ||
+ | </ | ||
+ | * '' | ||
+ | <code cpp> | ||
+ | using namespace NS1; | ||
+ | fun(); | ||
+ | </ | ||
+ | <code bash> | ||
+ | # output | ||
+ | # 如果 NS1 中定义了 fun() | ||
+ | NS1 | ||
+ | # 如果 NS1 中没有定义 fun(), 全局中定义了 fun() | ||
+ | global fun | ||
+ | </ | ||
+ | <WRAP center round box 100%> | ||
+ | * 如果都定义了 '' | ||
+ | * '' | ||
+ | </ | ||
+ | * 名字空间别名:使用别名代替完整的命名空间名进行调用: | ||
+ | <code cpp> | ||
+ | namespace n = NS1; | ||
+ | n::fun(); | ||
+ | </ | ||
+ | ==std 命名空间== | ||
+ | * std 命名空间是 C++ 标准库的命名空间,用法与上述的命名空间用法相同。 | ||
+ | * name mangling:C++ 会为不同命名空间下的相同 name 进行变化,为链接使用: | ||
+ | <code bash> | ||
+ | # checking the mangling data | ||
+ | nm main.o - o | ||
+ | # demangling,查看 mangling 之前的原始数据 | ||
+ | nm main.o - o | c++filt -t | ||
+ | </ | ||
+ | <WRAP center round box 100%> | ||
+ | '' | ||
+ | </ | ||
+ | ====控制流==== | ||
+ | * if statement:通过选择分支来选择执行的代码 | ||
+ | * 条件部分:判断是否执行 | ||
+ | * 使用**相等**('' | ||
+ | * 赋值表达式会被解释为 (y = 42 -> 42),而 42 会被转化为布尔值 '' | ||
+ | * 使用 '' | ||
+ | * 语句部分:要执行的操作 | ||
+ | * while statement:循环条件判断 | ||
+ | ====结构体 / 自定义类型==== | ||
+ | * 结构体:可以将不同的数据放置在一起,并使用 '' | ||
+ | * 结构体可以作为参数被传入函数 | ||
+ | * 结构体可以设置自己的成员函数 | ||
+ | <code cpp> | ||
+ | struct Point | ||
+ | { | ||
+ | int x = 1; | ||
+ | int y = 2; | ||
+ | //member function | ||
+ | Point fun(Point p) | ||
+ | { | ||
+ | p.x += 1; | ||
+ | p.y += 1; | ||
+ | return p; | ||
+ | } | ||
+ | }; | ||
+ | |||
+ | int main(int argc, char const *argv[]) | ||
+ | { | ||
+ | Point p; | ||
+ | //call | ||
+ | p = p.fun(p); | ||
+ | std::cout << p.x << " " << p.y << std:: | ||
+ | } | ||
+ | </ |