在学习和试验模板时,我遇到了一些我无法完全掌握的东西.
class sample
{
public:
sample(int a = 0) {}
};
template <typename T1,typename T2>
void add(T1 a) // Replace T1 with T2 resolves compilation error.
{}
int main()
{
add<sample>(3);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码导致编译错误(03和c ++ 0x).但是当我将添加的参数类型从T1更改为T2时,它就可以了.对于nm,创建的原型是add(sample,int)[T1 = sample,T2 = int].为什么编译失败,T1作为参数类型而不是T2?
我包括第三方头文件.它具有可能/可能不会抛出异常的函数.在我的源代码中,如何确定可能从该文件中抛出哪些异常?这是一个面试问题.我的回复是通过函数声明并查找异常规范.这可能会给我们一些暗示.有没有其他方法可以预测可能抛出的异常?
template <typename T>
void myswap(T a,T b)
{
T temp = a;
a = b;
b = temp;
}
int main()
{
int m(20),n(30);
myswap(ref(m),ref(n));
//m is still 20 and n is still 30
}
Run Code Online (Sandbox Code Playgroud)
为什么m和n的值没有互换?传递包含在std::ref
INCREMENT函数中的值会导致原始变量(调用INCREMENT函数的堆栈帧中的变量)中的值更改.或者,std::ref
使用受限制/限制?