C语言: 有空间就可以操作
int main()
{
int a = 10;
char str[20];
new(str) int(10);
int* p = (int*)&str[4];
*p = 10;
}
//有空间不一定有对象 class==>object
class stu
{
private:
int num;
int sex;
public:
};
int main()
{
stu s1;
stu s2;
}
为什么c++初始化列表使用 “{}”
而不是"()" 因为:函数的调用也是a(),会造成不清楚。 所有的内置类型都可以用{}进行初始化。{}没有值,则默认为0 const和指针的关系
int a {10};
cin >> a
cin.getline(str,20,'#');
cout<<str<<endl;
const 和离它最近的变量名结合。
- const int * p 和int const * p是等价的
- int *const p 修饰的是本身的值。*p 可以改变,p不能变
- const int *const p 本身的值和指向的值都不能变。
int main()
{
int a = 10;
const int b = 20;
int * p1 = &a;
int *p2 = &a;
const int *p2 = &b;
}
int main()
{
int a = 10;
const int *s = &a;
int *p1 = s;
const int *p2 =s;
int *const p3 = s;
const int *const p4 = s;
return 0;
}
函数模板简单了解
: 产生了三份一模一样的代码:
template<class T>
T my_max(T a, T b)
{
cout << typeid(T).name() << endl;
return a > b ? a : b;
}
int main()
{
int x = my_max(12, 23);
int y = my_max('a', 'b');
int z = my_max(12.33, 23.33);
cout << "x =" << x << endl;
cout << "y =" << y << endl;
cout << "z =" << z << endl;
}
输出: int ,char , double
23 , b, 23.33
不能认为替换 否则有个坑:
template<class T>
void fun(T a)
{
T p, s;
}
int main()
{
int x = 0;
fun(x);
fun(&x);
}
---->
template<class T>
typedef int T; typedef int T;
void fun<int>(T a) void fun<int*>(T a)
{ {
T p, s; T p, s;
} }
如果认为,p只和T结合,s就是普通整型变量
名字空间域
为了解决命名冲突:比如防止多个程序员写代码中使用的全局函数名,变量名发生冲突。 为了解决全局污染问题,防止程序中的全局实体名,和其他程序中的全局实体名冲突。 若 a.cpp文件中有两个命名空间域: namespace a; name space b; 那么在b.cpp文件中就需要 使用 using namespace a; usingnamespace a; 才可以使用该命名域中的函数和变量。并且
namespace mzhying
{
double pi = 32.46;
double min(int a,int b) {return a-b]
}
namespace pr
{
double pi = 22.2222;
double min(int a,int b) {return a+b]
namespace qa
{
double ms(char a, char b ) {retur a- b};
}
}
namespace mzhying
{
double pi = 32.46;
double max(int a,int b) {return a-b]
}
int main()
{
int a = mzhying::min(10,20)
cout<<mzhying::pi<<endl;
cout<<pr::pi<<endl;
pr::qa::ms('a','b');
}
函数中不可以定义命名空间 使用using声明可以只写一次限定修饰名 using声明以关键using开头,后面是被限定修饰的名字空间成员名
|