Colin’s Blog

A C++ Programmer

C++ Note 1

本文是我的C++笔记的第一篇 My First C++ Note;

一些例子

1

 1#include <iostream>
 2
 3using namespace std;
 4
 5int main()
 6{
 7    string x{"222333"};
 8    char *y = "222333";
 9    string xx{x, 3};
10    string yy{y, 3};
11    cout << xx << endl;
12    cout << yy << endl;
13}

2

 1void pp(int x)
 2{
 3    cout<<"int";
 4}
 5
 6void pp(int* x)
 7{
 8    cout<<"int*";
 9}
10
11
12int main()
13{
14    pp(nullptr);// 输出int*
15    pp(NULL); // 有歧义,编译失败
16}

一些疑问

1int s[2][2]{
2    {1, 2}, {3, 4}};
3for (int *i : s)
4{
5    for (int j{}; j < 2; ++j)
6    {
7        cout << i[j];
8    }
9}

这段代码为何生效?s的类型不应该是int()[2]吗? 解释:s的类型为int[2][2],但是非常容易decay,因此大多数时候会提示为int()[2],例如你用char x{s};试图从报错中得到s的类型的时候就会提示为int()[2].此处从s中取出的应该是int[2],然后被decay为int 追问:那有没有办法让i的类型为int[2] 解答:写成auto& i 或者 int(&x)[2]即可 完整代码为

 1int s[2][2]{
 2    {1, 2}, {3, 4}};
 3for (int(&i)[2] : s)
 4{
 5    for (int j : i)
 6    {
 7        cout << j;
 8    }
 9}
10for (auto &i : s)
11{
12    for (auto j : i)
13    {
14        cout << j;
15    }
16}
17for (int j : (*s))
18{
19    cout << j;
20}