Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否创建变量的别名?_C++_Alias - Fatal编程技术网

C++ 是否创建变量的别名?

C++ 是否创建变量的别名?,c++,alias,C++,Alias,我在创建变量别名时遇到了一个难题,需要您的帮助 目的 我的函数采用两个向量,但我希望确保向量变量“a”将引用较长的向量。同时,我不想复制向量。因此,我使用引用来创建别名,但我遇到了一个难题 情景1 因为变量在if子句中,所以无法看到该变量,但我需要if子句来知道哪个更长 vector<float> conv(const vector<float> &operand1, const vector<float> &operand2){ if (

我在创建变量别名时遇到了一个难题,需要您的帮助

目的

我的函数采用两个向量,但我希望确保向量变量“a”将引用较长的向量。同时,我不想复制向量。因此,我使用引用来创建别名,但我遇到了一个难题

情景1

因为变量在if子句中,所以无法看到该变量,但我需要if子句来知道哪个更长

vector<float> conv(const vector<float> &operand1, const vector<float> &operand2){


if (operand1.size() < operand2.size()){
     const vector<float> &a = operand2;
     const vector<float> &b = operand1;
}
else{
    const vector<float> &a = operand1;
    const vector<float> &b = operand2;
}
vector conv(常量向量和操作数1、常量向量和操作数2){
if(操作数1.size()<操作数2.size()){
常量向量&a=操作数2;
常量向量&b=操作数1;
}
否则{
常量向量&a=操作数1;
常量向量&b=操作数2;
}
情景2

在if子句外部声明引用。不幸的是,在声明时必须初始化引用。但是,我需要if子句来知道将其声明为哪个操作数

vector<float> conv(const vector<float> &operand1, const vector<float> &operand2){

const vector<float> &a;
const vector<float> &b;

if (operand1.size() < operand2.size()){
     &a = operand2;
     &b = operand1;
}
else{
     &a = operand1;
     &b = operand2;
}
vector conv(常量向量和操作数1、常量向量和操作数2){
常数向量&a;
恒向量&b;
if(操作数1.size()<操作数2.size()){
&a=操作数2;
&b=操作数1;
}
否则{
&a=操作数1;
&b=操作数2;
}
有没有办法解决这个问题?非常感谢。

这是你想要的吗:

vector<float> conv(const vector<float>& op1, const vector<float>& op2) {
    const vector<float> &a = op1.size() < op2.size() ? op2 : op1; // the longer one
    const vector<float> &b = op1.size() < op2.size() ? op1 : op2; // the other
    ...
}
向量conv(常量向量和op1,常量向量和op2){ 常量向量&a=op1.size()您可以使用指针而不是引用:

vector<float> conv(const vector<float> &operand1, const vector<float> &operand2)
{
    const vector<float> *a;
    const vector<float> *b;

    if (operand1.size() < operand2.size())
    {
        a = &operand2;
        b = &operand1;
    }
    else
    {
        a = &operand1;
        b = &operand2;
    }

    // use *a and *b as needed ...
}
vector conv(常量向量和操作数1、常量向量和操作数2)
{
常数向量*a;
常数向量*b;
if(操作数1.size()<操作数2.size())
{
a=&2;
b=&1;
}
其他的
{
a=&1;
b=&2;
}
//根据需要使用*a和*b。。。
}

我会保存
的结果是的,你是对的。我只是不想在这里使用其他变量,因为任何现代编译器都会进行优化。非常感谢。这正是我需要的。:)