gpt4 book ai didi

c++ - 为什么函数参数中的 const 限定符用于重载解析?

转载 作者:可可西里 更新时间:2023-11-01 16:16:25 25 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
Functions with const arguments and Overloading

我对重载和 const 声明规则感到很困惑。这里有两件让我困惑的事情,也许你能帮助我找到我头脑中更深层次的误解,这些误解导致我对它们感到困惑。 ;)

第一期:

我的编译器允许这样做:

void f(int & x) {
std::cout << "plain f" << std::endl;
}
void f(const int & x) {
std::cout << "const f" << std::endl;
}

但是下面会导致编译错误(函数已经有主体):

void f(int x) {
std::cout << "plain f" << std::endl;
}
void f(const int x) {
std::cout << "const f" << std::endl;
}

我想这是有道理的,因为我认为 const 只是告诉编译器传递的对象没有改变,在第二种情况下它无论如何都会被复制。但如果这是正确的,那么为什么我可以使用 const 重载函数?

换句话说,为什么我使用编译版本并像这样调用函数:

  int x1 = 5;
const int x2 = 5;
f(x1);
f(x2);

我会两次得到“plain f”和“const f”而不是“const f”吗?显然,现在我还使用 const 来告诉编译器要调用哪个函数,不仅引用不会改变。这变得更加困惑,因为如果我删除“普通”版本它工作得很好并调用“const”版本两次。

现在我的实际问题是什么?我想知道这种行为背后的想法是什么,否则很难记住它。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com