1、typename 在C++11中 代替 class用于声明标示符为类型,class主用于声明或定义类类型和强枚举形式。另外typename增加了类似于 #define 这样的宏定义功能,不过不是简单的字符替换,而是高于字符替换级别,将字符1声明为类型标示符去声明字符2为变量。
2、unable to cache user root
sudo 失败, 普通用户。 重装,使用英文账号,并且不要登陆AppleID,这样就可以建立管理员账户了。不过目前使用速度不流畅,等过了11月上班后再整理这些硬件细节。
3、一个大工程中选择清理的时候一定要小心,不要全部清理掉,要不然是在浪费自己的时间等待编译。
4、变量声明即初始化。只不过声明时初始化调用的是默认的初始化方式,而构造初始化则是显示调用了构造函数或者再次调用复制构造函数去初始化一个对象,得到一个比较确定的初值。
12、lambda和auto使用继续使用,auto确实方便,只要控制用于局部区域变量可读性也是很强的。
<pre name="code" class="cpp">
// TestLanguage.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <vector>
using namespace std;
#include <iostream>
#include <algorithm>
void testVectorSwap()
{
vector<string> a;
a.push_back("I'm vl");
vector<string> b;
b.push_back("V2");
b.push_back("I'm !");
auto c = [](vector<string> temp) ->void
{
for_each(temp.begin(),temp.end(),[](string elem) ->void
{
cout<<elem.c_str()<<"\t";
});
cout<<endl;
};
c(a);
c(b);
//采用的使移动交换的形式,只是把底层的数据指针交换了。
a.swap(b);
c(a);
c(b);
//两种操作方式,另外一种则是(n,value)的形式,主要用来常量值,下面这种主要用于复制其他容器
b.assign(a.begin(),a.end());
c(a);
c(b);
}
class A
{
public:
void show()
{
cout<<"A"<<endl;
}
};
class B : public A
{
public:
void show(int )
{
cout<<"B"<<endl;
}
};
template<typename T>
class C
{
public:
template< typename Iter>
void set(Iter begin);
};
//类成员模板
template<typename T>
template< typename Iter>
void C<T>::set(Iter begin)
{
cout<<"ok"<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
testVectorSwap();
B b;
A& a = b;
a.show();
b.show(1);
C<int>c;
c.set(a);
return 0;
}
</pre><p></p><pre>