本帖最后由 rain-xuan 于 2021-7-24 12:01 编辑
Day_2
using的声明和编译指令(重点)
using的声明可以让命名空间中的某个标识符可以直接使用
namespace A{
int a=10,b,c;
}
test_1()
{
using A::a; //从这一行开始以后标识符a都是A作用域中的a
cout << a << endl;
int a=20; //这是会报错的,重定义的错误,using的声明相当于局部变量,不可在局部作用域下重定义
}
using的编译指令让命名空间中的标识符都可以直接使用
namespace A{
int a=10,b=20,c=30;
}
test2(){
using namespace A;
cout << a << endl;
cout << b << endl;
cout << c << endl;
int a=50; //正确,因为这时的命名空间的a相当于全局变量,这里的a是局部变量,不影响就近原则
cout << a << endl; //a的值为50,就近原则
}
struct 类型的加强(重点)
- C语言定义了结构体之后,定义变量时还要加
struct 关键字,但是C++不用
- C语言的结构体只能定义成员,但是C++既可以定义成员,又可以定义方法
struct node1{
int a = 0;
char name[10];
};
test_1(){
node1 Node; //强化一
}
struct node2{
int b = 10;
void func()
{
cout << "func" << endl;
}
};
test_2(){
node2 Node_2;
Node_2.func();
}
更加严格的类型检查(了解)
#include <stdio.h>
#include <stdlib.h>
int main()
{
char* p = malloc(64); //隐式声明转换
return 0;
}
#include <iostream>
using namespace std;
int main()
{
//char* p = malloc(64); //会报错 void*
char* p = (char*)malloc(64); //不可以隐式声明,必须显示转换
return 0;
}
三目运算符(了解)
- c语言三目运算符返回的是右值
- c++语言三目运算符返回的是左值
- 在赋值操作符左边的为左值,右边的为右值(存疑,待完善)
test_1(){
int a = 10;
int b = 20;
printf("%d\n",a>b?a:b);//打印a、b中较大的值
(a>b?a:b) = 100; //err 等价于 20 = 100
//正确操作
*(a>b?&a:&b) = 100; //取a、b的地址,然后解引用,相当于给两者较大的变量符值
printf("a=%d,b=%d",a,b); //a = 10 , b = 100
}
test_2(){
int a = 10;
int b = 20;
(a>b?a:b) = 100;
cout << "a=" << a <<" " << "b = " << b << endl; //a = 10 , b = 100;
}
|