我碰到一个奇怪的现象今天来到这里,我需要不隐式转换值的功能。

在寻找一些对谷歌,我发现这个 http://www.devx.com/cplus/10MinuteSolution/37078 / 1954

但我认为这是一个有点傻使用函数重载的其他所有类型,我要阻止这样反而我这样做。


void function(int& ints_only_please){}

int main() { char a=0; int b=0; function(a); function(b); }

我发现的代码给一个朋友,他建议我加入常量INT之前,所以变量是不可编辑的,但是当我开始没编译罚款,但它不应该,看看下面来看看我是什么意思


void function(const int& ints_only_please){}

int main() { char a=0; int b=0; function(a); //Compiler should stop here but it doesn't with const int function(b); }

有谁知道这是为什么?

有帮助吗?

解决方案

使用模板以获得所需的效果:

template <class T>
void foo(const T& t);

template <>
void foo<int>(const int& t)
{

}

int main(){
  foo(9); // will compile
  foo(9.0); // will not compile
  return 0;
}

请注意,我们只写模板int的一个特殊版本,使得具有任何其他类型作为模板参数调用会导致编译错误。

其他提示

是合法的结合临时到const参考,但不是非参考const

一个char可以隐式转换为int和临时,它是此转换的结果可以被绑定到延伸的临时的寿命,直到函数退出一个const int&函数参数。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top