c++基础语法

简介: c++基础语法

auto关键字

auto可以自动识别类型,根据右边自动识别类型

警告:

1.auto不能做函数的参数

2.auto不能定义数组

3.auto使用的时候不能独立定义,必须给值

即auto a=2;这样是不合理的

int main()
{
  const int a = 0;
  int b = 0;
  //auto自动推导c的类型,什么类型都可以
  auto c = &a;//a的类型是int,c就是int*
  auto d = 'a';//d是char
  auto k = 1.1;
  //typeid可以自动打印对象的类型
  cout << typeid(c).name() << endl;
  cout << typeid(d).name() << endl;
  cout << typeid(k).name() << endl;
  //实际中我们不会用那样用auto
  //STL和范围或里面用
  //std::map <std::string, std::string> dict = { {"sort","排序"},{"insert","插入"} };
  //std::map <std::string, std::string>::iterator it = dict.begin();
  //auto it = dict.begin();//自动识别右边的变量,简化前面类型
  return 0;
}
int main()
{ 
  const double m = 1.1;
  int x = 10;
  auto a = &x;//auto 是int*
  auto* b = &x;//auto 和auto*都是一样的
  auto& d = m;//这个不会识别前面的const,相当于权限的放大,auto只是一个类型
  const auto y = x;//
  auto& c = x;//int,c是x的引用
  cout << typeid(a).name() << endl;
  cout << typeid(b).name() << endl;
  cout << typeid(d).name() << endl;
  return 0;
}

auto的应用

范围for

int main()
{
  //语法糖,用起来很甜——范围for
  int array[5] = { 1,2,3,4,5 };
  for (int i = 0; i < sizeof(array)/sizeof(int); i++)
  {
    cout << array[i] << endl;//遍历数组
  }
  //c++11
  for (auto e:array)//自动依次取array数组里面中的每个元素赋值给e,名称是我们随机取的,int也可以
  {
    cout << e << endl;
  }
  //范围for,修改把数组中的每个值+1
  for (auto e : array)
  {
    e++;//这样写不改变里面的每个值
  }
  for (auto& e : array)//e是里面每个值的别名
  {
    e++;//这样就对每个值进行++,e的生命周期是一次循环,加个指针就不行,
  }
  //范围for的array必须是数组名,不能是指针,所以不能用传参过去使用
  TESTFOR(array);
  return 0;
}

nullptr

因为c++里面NULL既可以代表空指针,也可以代表0,如果传NULL的话就可能有歧义,所以我们就专门用nullptr来代表c++里面的空指针

相关文章
|
2月前
|
Java C# C++
C++ 11新特性之语法甜点1
C++ 11新特性之语法甜点1
33 4
|
2月前
|
编译器 C++ 容器
C++ 11新特性之语法甜点2
C++ 11新特性之语法甜点2
30 1
|
2月前
|
存储 算法 编译器
C++ 11新特性之语法甜点4
C++ 11新特性之语法甜点4
28 0
|
2月前
|
安全 C++ 容器
C++ 11新特性之语法甜点3
C++ 11新特性之语法甜点3
35 0
|
3月前
|
编译器 C++ 容器
C++语言的基本语法
想掌握一门编程语言,第一步就是需要熟悉基本的环境,然后就是最重要的语法知识。 C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。 对象 - 对象具有状态和行为。例如:一只狗的状态 - 颜色、名称、品种,行为 - 摇动、叫唤、吃。对象是类的实例。 类 - 类可以定义为描述对象行为/状态的模板/蓝图。 方法 - 从基本上说,一个方法表示一种行为。一个类可以包含多个方法。可以在方法中写入逻辑、操作数据以及执行所有的动作。 即时变量 - 每个对象都有其独特的即时变量。对象的状态是由这些即时变量的值创建的。 完整关键字
|
4月前
|
Java 编译器 程序员
C++中的语法知识虚继承和虚基类
**C++中的多继承可能导致命名冲突和数据冗余,尤其在菱形继承中。为解决这一问题,C++引入了虚继承(virtual inheritance),确保派生类只保留虚基类的一份实例,消除二义性。虚继承通过`virtual`关键字指定,允许明确访问特定路径上的成员,如`B::m_a`或`C::m_a`。这样,即使基类在继承链中多次出现,也只有一份成员副本,简化了内存布局并避免冲突。虚继承应在需要时提前在继承声明中指定,影响到从虚基类派生的所有后代类。**
|
4月前
|
编译器 C++ 开发者
C++一分钟之-属性(attributes)与属性语法
【7月更文挑战第3天】C++的属性(attributes)自C++11起允许附加编译器指令,如`[[nodiscard]]`和`[[maybe_unused]]`,影响优化和警告。注意属性放置、兼容性和适度使用,以确保代码清晰和可移植。示例展示了如何使用属性来提示编译器处理返回值和未使用变量,以及利用编译器扩展进行自动清理。属性是提升代码质量的工具,但应谨慎使用。
140 13
|
5月前
|
编译器 程序员 C++
C++一分钟之-属性(attributed)与属性语法
【6月更文挑战第28天】C++的属性为代码添加元数据,帮助编译器理解意图。C++11引入属性语法`[[attribute]]`,但支持取决于编译器。常见属性如`nodiscard`提示检查返回值,`maybe_unused`防止未使用警告。问题包括兼容性、过度依赖和误用。使用属性时需谨慎,确保团队共识,适时更新以适应C++新特性。通过示例展示了`nodiscard`和`likely/unlikely`的用法,强调正确使用属性能提升代码质量和性能。
89 13
|
5月前
|
编译器 C语言 C++
下一篇
无影云桌面