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/

10-11 22:56
查看更多