引用static_cast的引用是否与指向static_cast的指针具有相同的运行时间成本?
例如
class B;
class A: public class B;
A obj;
A& ref = obj;
A* ptr = &obj;
// 1
static_cast<B&>(ref);
// 2
static_cast<B*>(ptr);
Run Code Online (Sandbox Code Playgroud) 读完这个答案后,我不太确定引用是否确实占用内存。我发现当编译器用引用的变量替换引用时,它不会占用内存,就像用引用的变量交换引用一样。
然而,
在一般情况下,编译器通常将引用实现为指针。但他们通常有更多关于参考可能指向的信息,并将其用于优化。
由于指针确实占用内存,那么由于编译器将其设置为指针,该引用现在不会导致占用内存吗?在编译器选择使引用成为指针而不是仅仅交换它的情况下,可以说引用实际上确实占用了内存,但以一种稍微隐式的方式?
事实上,编译器什么时候选择将引用实现为指针而不是交换,或者编译器之间的情况不同?
对于以下代码:
#include <stdio.h>
int main()
{
int a[][3] = {1, 2, 3, 4, 5, 6};
int (*ptr)[3] = a;
printf("%d %d ", (*ptr)[1], (*ptr)[2]);
++ptr;
printf("%d %d\n", (*ptr)[1], (*ptr)[2]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
应该打印什么?我期待:
2 3 3 4
但输出是:
2 3 5 6
我期待输出,2 3 3 4
因为最初ptr它指向二维数组的第一行a[][3].因此(*ptr)[1],首先printf会给我们2,就像明智的(*ptr)[2]会给我们3.但是++ptr在线之后它将开始指向第一行的第二个元素a[][3].因此(*ptr)[1],第二行现在应该给我们3,同样(*ptr)[2]应该给我们4.
这就是我现在所拥有的,但这就是我想要拥有的:
我不想只是添加空格,因为当用户单击输入字段时,它会清除输入。但我不想只是将其清除到另一个空间,因为用户可以将其删除。我想要一个预制属性在左侧有一个小的空间偏移,如果我稍后评估输入,最好忽略它。提前致谢。
我知道如何传递一个常量大小的数组作为引用,但我想知道如何传递一个可变大小的数组作为对另一个函数的引用.任何帮助将非常感激.谢谢
例如,我有以下代码片段:
void y(int (&arr)[n]) //Gives error
{}
void x(Node * tree, int n)
{
int arr[n];
y(arr);
}
Run Code Online (Sandbox Code Playgroud)
我听说我们可以模板化函数并使大小成为模板参数,但我无法这样做.
对于以下代码:
#include<iostream>
using namespace std;
int main ()
{
int cin;
cin >> cin;
cout << "cin : " << cin;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我期望输出为:
cin : <input>
Run Code Online (Sandbox Code Playgroud)
但输出是:
cin : <junk value>
Run Code Online (Sandbox Code Playgroud)