#include <iostream>
template <typename T, typename U>
struct is_same{
const static bool value = false;
};
template <typename T>
struct is_same<T, T>{
const static bool value = true;
};
template<typename T, typename U>
bool same(T, U){
return is_same<T, U>::value;
}
int main(){
const int x = 0;
int y;
std::cout << is_same<const int, int>::value << '\n'; // false
std::cout << same(x, y) << '\n'; // true
}
如果类型 x 是 const int 并且 y 是 int,为什么同样会返回 true?应该怎么做才能像 is_same 一样返回 false?
您正在“按值”将值传递给函数:
那些。函数参数是临时变量,包含调用函数时传递的值的副本。创建副本时,稳定性就会丢失。
使用“通过引用”传递参数:
PS 为了支持表达式类型的定义,
same(1+2, 3.0+4.0)可以使用通用引用: