gpt4 book ai didi

C++:强制执行一个函数,使其不能接受任何按值传递的参数

转载 作者:行者123 更新时间:2023-11-30 01:40:52 27 4
gpt4 key购买 nike

在 C++ 中,您将如何定义和声明一个接受任何按值传递的参数的函数。像下面这样应该返回一个错误:

#include <iostream>
using namespace std;

// function declaration
void swap(int &x, int &y);

int main () {
// local variable declaration:
int a = 100;
int b = 200;

cout << "Before swap, value of a :" << a << endl;
cout << "Before swap, value of b :" << b << endl;


swap(a, b); //This call MUST NOT be valid.


int &x = a;
int &y = b;
swap(x,y); // This one should be valid.

cout << "After swap, value of a :" << a << endl;
cout << "After swap, value of b :" << b << endl;

return 0;
}

void swap(int &x, int &y) {
int temp;
temp = x; /* save the value at address x */
x = y; /* put y into x */
y = temp; /* put x into y */

return;
}

swap(a, b) 行中,参数按值传递。我希望它在这样做时返回错误。

更新

我在一次采访中被问到这个问题。定义一个在被值调用时返回错误的方法。

像上面的 swap 函数调用在 main ab 中必须是引用。

最佳答案

int a{};
int& b{a};

那么你不能声明或定义一个函数foo以某种方式使

foo(b);

编译时

foo(a);

不编译/工作。

如果 foo 声明为 foo(int& c)然后调用foo编译器将绑定(bind)引用 c反对a - 不管你是否通过了ab因为引用 c可以绑定(bind)到 int 类型的任何非常量、非 volatile 左值.

a范围内和 b两者都是左值,从 C++ 的角度来看,对 foo 的调用应该没有区别。因为这就是引用的意义所在:它们只是原始对象的某种“命名别名”。

定义函数 swap(int&, int&)已经阻止了“按值调用”。术语“按值调用”与“按引用调用”指的是函数参数的属性,而不是传递对象的属性。

关于C++:强制执行一个函数,使其不能接受任何按值传递的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42479618/

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