gpt4 book ai didi

c++ - 为什么 cin 不像 scanf 那样有说明符格式或 & 符号?

转载 作者:太空狗 更新时间:2023-10-29 23:39:37 28 4
gpt4 key购买 nike

int a;

在 C++ 中,为什么不

cin >> a;

需要类似的符号

scanf("%d", &a);

在 C 中?

最佳答案

在 C++ 中,我们不仅有变量和指针(如在 C 中),还有引用。在调用端,传递引用看起来就像按值传递变量,但在被调用函数端,它实际上接收的不是拷贝,而是对实际变量的引用,因此可以更改它。您可以将引用想象成指针,但不需要取消引用。

std::istream& operator>> (std::istream&i, some_type&x);

声明一个运算符,该运算符采用对 std::istream 的引用和对 some_type 的引用并返回 std::istream 引用。通过此声明,您现在可以

some_type x;
std::cin >> x; // calls above operator, pasing x by reference

通过引用传递和通过指针传递非常相似,并且实际上可能产生相同的代码:

void f1(int*x) { *x=2; }
void f2(int&x) { x=2; }

int a;
f1(&a); // is equivalent
f2(a); // to this

C++ 中的常识是传递不应按值(如果它们适合单个寄存器)或按 const 引用更改的变量。可能被调用的函数更改的变量可以通过 (non-const) 引用或指针传递,这是一个风格问题:对于后者,变量在函数调用时是明确的可以更改,而前者(通过引用传递)需要查找函数的 API 以找出是否通过值、引用或 const 引用传递。

关于c++ - 为什么 cin 不像 scanf 那样有说明符格式或 & 符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32727946/

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