【问题标题】:overloading a function which differs from the original only by "const" in parameter list [duplicate]仅通过参数列表中的“const”重载与原始函数不同的函数[重复]
【发布时间】:2015-06-15 14:00:24
【问题描述】:

我有一个关于重载函数的问题,只有“const”不同。例如,如果有一个函数 A,它是按引用传递的,则可以通过按引用传递到 const 来重载它。但是,什么时候调用第一个,什么时候调用第二个? 谢谢!

【问题讨论】:

  • 从我的测试来看,临时文件永远不会绑定到非const 版本。如果它们不是const,则非临时版本将始终绑定到非const 版本。看this

标签: c++ constants overloading


【解决方案1】:

肯定没问题。

void foo(int& ) { std::cout << "ref\n"; }
void foo(const int& ) { std::cout << "cref\n"; }

如果您传递int 类型的非常量左值,将调用第一个。在任何其他情况下都将调用第二个。

int i = 4;
const int ci = i;

foo(4);  // cref
foo(i);  //  ref
foo(ci); // cref
foo(1L); // cref

struct X {
    operator int() { return 42; }
};

foo(X{}); // cref

【讨论】:

  • 感谢您的回答。我认为 pass-by-reference-to-const 只会限制函数修改引用。但是从例子来看,它也限制了调用者??很高兴知道!
【解决方案2】:

我猜你的意思是这样的

void A(int& arg)
{
    ...
}

void A(const int& arg)
{
    ...
}

然后你就可以像这样使用函数了

int i = 5;
A(i);  // will call `A(int&)`
A(5);  // will call `A(const int&)`

const int ci = 5;
A(ci);  // will call `A(const int&)`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 2017-02-17
    • 2011-04-10
    • 2013-05-18
    • 1970-01-01
    相关资源
    最近更新 更多