C++ 使用'&';C+中函数名前的运算符+;

C++ 使用'&';C+中函数名前的运算符+;,c++,function,reference,C++,Function,Reference,引用定义对象的替代名称。引用类型“引用” 另一种。我们通过编写&d形式的声明符来定义引用类型, 其中d是要声明的名称 接下来,引用不是对象。相反,引用只是已存在对象的另一个名称。因此,我们将使用这些引用逐个传递参数,以便它直接影响实际参数 问题: 当我们在函数名之前使用引用(&)时会发生什么 我有点困惑,因为我认为它将返回return的别名(变量名)。还是我错了 std::vector<std::string> &split(const std::string &s,

引用定义对象的替代名称。引用类型“引用” 另一种。我们通过编写
&d
形式的声明符来定义引用类型, 其中
d
是要声明的名称

接下来,引用不是对象。相反,引用只是已存在对象的另一个名称。因此,我们将使用这些引用逐个传递参数,以便它直接影响实际参数

问题: 当我们在函数名之前使用引用(
&
)时会发生什么

我有点困惑,因为我认为它将返回return的别名(变量名)。还是我错了

std::vector<std::string> &split(const std::string &s, char delim, 
                                std::vector<std::string> &elems) {
    std::stringstream ss(s);
    std::string item;
    while (std::getline(ss, item, delim)) {
        elems.push_back(item);
    }
    return elems;
}
std::vector&split(const std::string&s、char delim、,
标准:向量和元素){
标准::stringstream ss(s);
std::字符串项;
while(std::getline(ss,item,delim)){
元素推回(项目);
}
返回元素;
}

C
中,
&func
其中
func
是一个函数,其计算结果是该函数的地址,该地址可分配给一个函数指针,该指针指向与函数
func
具有相同签名的函数

int func(float);

int (*fp)(float) = &func; 
// equivalent to
int (*fp)(float) = func;

C++中,当函数声明中在函数名之前使用ref符号(
&
)时,它与函数的返回值相关联,表示函数将通过引用返回

当未在声明上下文中使用时,将ref符号置于函数名之前会导致调用运算符的地址并返回函数的地址。这可用于创建指向函数的指针

// Some function.
int sum(int a, int b) {
    return a + b;
}

int main() {
    // Declare type func_ptr_t as pointer to function of type int(int, int).
    using func_ptr_t = std::add_pointer<int(int, int)>::type;

    func_ptr_t func = &sum; // Declare func as pointer to sum using address-of.
    int sum = func(1, 2);   // Initialize variable sum with return value of func.
}
//一些函数。
整数和(整数a,整数b){
返回a+b;
}
int main(){
//将func_ptr_t类型声明为指向int(int,int)类型函数的指针。
使用func_ptr_t=std::add_pointer::type;
func_ptr_t func=&sum;//使用的地址将func声明为指向sum的指针。
int sum=func(1,2);//使用func的返回值初始化变量sum。
}
C中,
&
的唯一用法是用于操作员的地址。C语言中不存在引用

'// return the plural version of word if ctr is greater than 1
string make_plural(size_t ctr, const string &word,
                           const string &ending)
{
    return (ctr > 1) ? word + ending : word;
}'
此函数的返回类型为字符串,这意味着返回值被复制到 呼叫站点。此函数返回word的副本,或返回未命名的 由于添加单词和结尾而产生的临时字符串

与任何其他引用一样,当函数返回引用时,该引用为 只是它所指对象的另一个名称。作为一个例子,考虑一个函数 返回对其两个字符串参数中较短参数的引用:

'// return a reference to the shorter of two strings
const string &shorterString(const string &s1, const string
&s2)
{
    return s1.size() <= s2.size() ? s1 : s2;
}'
”//返回对两个字符串中较短字符串的引用
常量字符串和短字符串(常量字符串和s1,常量字符串
&s2)
{

记住,用C或C++来标记。它们是不同的语言(这就是为什么没有C-O-C++标签)。而且,因为C没有C++感兴趣的引用(这里是“操作符”的地址)。我想知道你们为什么要关闭这个。“当我们在函数名之前使用引用时会发生什么”这是一个完全正确的问题。@fuzzxl谢谢您的欣赏。@fuzzxl这是因为很难分辨出问题是什么。“在函数名之前”在什么上下文中?一个代码示例会有所帮助。@Maxprm所以您的回答是关闭它而不是要求澄清?您知道,“不清楚您在问什么”这和“我不能回答这个问题”不一样。
'// return a reference to the shorter of two strings
const string &shorterString(const string &s1, const string
&s2)
{
    return s1.size() <= s2.size() ? s1 : s2;
}'