有
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/