VS 2008/2010和VS 2013中的不同重载功能分辨率

时间:2014-11-19 12:09:18

标签: c++ visual-studio-2010 visual-studio-2008 overloading visual-c++-2008

我有一个具有以下定义的函数,

void ClassA::setLabel(int* newLabels){
  try{
    std::vector<int> labels(newLabels, newLabels + bonds.size());
    setLabel(labels);
  }
  catch(const std::exception& e){
    propogate_exception(e, "In function ClassA::setLabel(int*):");
  }
}

void ClassA::setLabel(const std::vector<int>& newLabels){
  try{
    std::set<int> labelS(&(newLabels[0]), &(newLabels[newLabels.size()]));
    if(!(bonds.size() == labelS.size())){
      throw std::runtime_error(exception_msg("Does not match."));
    }
    labels = newLabels;
  }
  catch(const std::exception& e){
    propogate_exception(e, "In function AClass::setLabel(std::vector<int>&):");
  }
}

代码的一部分实现为

ClassA M;
int labels[]={1,2,3,4};
M.setLabel(labels);

在Virtual C ++ 2008 Pro和2010 Pro中,对setLabel的调用绑定到第二个定义,导致vector subscript out of range错误;而在VC ++ 2013中,它必然会出现在第一个定义中。

我希望对第一个定义有一致的绑定。 我的问题是: (1)为什么VC ++版本之间存在这种不同的行为? (2)有没有更好的方法来设计和实现界面以避免这种歧义?

更新:我删除了所有VS安装并仅使用VC ++ 2008.现在可以解决此问题。谢谢大家的帮助。

0 个答案:

没有答案