c++ - 为什么使用这个删除的函数有效?

标签 c++

struct S {
    S() {}
    S (const S &) = delete;
};

void f1 (S s) {}
void f2 (S &s) {}

int main() {
    S s;

    f2(s);
}

既然 S(S &s) 被删除,为什么使用 f2 不会抛出错误,因为当它被声明时它传递了参数 S &s?当我使用 f1(s) 时,它会抛出一个错误。我查看了已删除函数的定义,我认为这会引发错误,但事实并非如此。为什么?

最佳答案

因为通过引用传递不会创建拷贝(这是 f2 使用的)。

另一方面,

f1 接受一个按值传递的参数,它会生成一个拷贝。

关于c++ - 为什么使用这个删除的函数有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12110083/

相关文章:

c++ - 当存在内联命名空间时,如何显式引用封闭的命名空间?

c++ - 通过地址调用函数

c++ - 重载全常量类型的复制赋值运算符的正确方法是什么?

c++ - (struct in_addr **) 和 *(struct in_addr *) 之间的区别

c++ - 确定一个元素是否被插入到 HashMap 中

C++ pimpl idiom : Implementation depending on a template parameter 收藏

c++ - 理解这个模板函数

c++ - 用于平铺矩阵乘法的 AVX 内在函数

c++ - 迭代器实现问题

c++ - 假设类模板参数