What & How & Why

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
cs:programming:cpp:courses:cpp_basic_deep:chpt_1 [2024/04/14 06:50] – [std 命名空间] codingharecs:programming:cpp:courses:cpp_basic_deep:chpt_1 [2024/04/14 12:53] (当前版本) – [结构体 / 自定义类型] codinghare
行 85: 行 85:
 缓冲区是内存中的一个区域,用于优化读写的速度。缓冲区满了以后,会一次性将内容输出。但问题在于,程序没有正常结束时,缓冲区中的内容会丢失。如果为了查找程序的 Bug,那么这部分内容是需要保留的。这种情况下,需要立即刷新缓冲区。 缓冲区是内存中的一个区域,用于优化读写的速度。缓冲区满了以后,会一次性将内容输出。但问题在于,程序没有正常结束时,缓冲区中的内容会丢失。如果为了查找程序的 Bug,那么这部分内容是需要保留的。这种情况下,需要立即刷新缓冲区。
 </WRAP> </WRAP>
-==std 命名空间==+===命名空间===
 命名空间的存在是为了防止命名冲突。多人开发的过程中很可能会存在同名函数,放在一起可能会存在调用的冲突。这种情况下可以选择将其分置于不同的命名空间内: 命名空间的存在是为了防止命名冲突。多人开发的过程中很可能会存在同名函数,放在一起可能会存在调用的冲突。这种情况下可以选择将其分置于不同的命名空间内:
 <code cpp> <code cpp>
行 138: 行 138:
 namespace n = NS1; namespace n = NS1;
 n::fun(); n::fun();
 +</code>
 +==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
 +</code>
 +<WRAP center round box 100%>
 +''main()'' 不会做 mangling,因为 ''main()'' 是唯一的。
 +</WRAP>
 +====控制流====
 +  * if statement:通过选择分支来选择执行的代码
 +    * 条件部分:判断是否执行
 +      * 使用**相等**(''=='')而不是**赋值** ''=''
 +      * 赋值表达式会被解释为 (y = 42 -> 42),而 42 会被转化为布尔值 ''true'',因此赋值表达式恒为真。
 +      * 使用 ''const'' 阻止赋值表达式作为调价
 +    * 语句部分:要执行的操作
 +  * 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::endl;
 +}
 </code> </code>