为此道歉,我是一名学生正在努力学习C++,我只是觉得如果我问这个问题并且对此有很多正确的看法会更好,所以我很抱歉提出愚蠢的问题.我只是觉得问题比不知道更好.
我分别理解地址运算符&和const关键字的含义.但是,当我在阅读某个地方的示例代码时,我看到const&使用了,只是想要暗示的是什么?
它用于代替函数原型中的参数,例如:
void function (type_Name const&);
Run Code Online (Sandbox Code Playgroud)
如果只使用其中一个我会理解,但我在这里有点困惑所以一些专业的见解会很棒.
我可以使用一个对象作为它的指针或它的引用.我知道不同之处在于必须手动删除指针,并且引用仍然存在,直到它们超出范围.
我什么时候应该使用它们?有什么实际区别?
这些问题都没有回答我的疑虑:
我正在学习指针和参考,我的问题涉及这个解释,特别是以下部分:

这表明声明int& ri = i创建了一个新的内存单元格,其值为&i并存在于未知的内存位置.
为了测试这个理论,我写了一个简单的案例,结果如下所示:

我感到困惑的是,r并且i具有相同的内存地址,这似乎与读数相矛盾.结果表明,int& ri = i松散意味着"为内存单元创建一个别名i并调用它r",这样两者都指向完全相同的单元格.
文件是否正确,或者我错过了什么?
在C++中是否有一种规则或指导,当一个必须或至少应该选择使用引用传递而不是值时?
如果知道(小老实说)对象的大小与某个对象有关,则很难判断.
可能重复:
FAQ:如何将对象传递给C++中的函数?
指针与参考
大家好,
在c/c ++中,我们可以通过引用传递对象或传递对象的指针.
例如:
我想创建一个函数,它将字符串向量作为输入,并输出一个包含每个字符串的值的映射.函数的返回值是bool,表示成功或失败.
功能(按参考调用)
bool calculateSomeValue( vector<string> input, map<string, double>& result)
{
//// bla bla bla
return true/false;
}
功能(使用指针)
bool calculateSomeValue( vector<string> input, map<string, double>* result)
{
//// bla bla bla
return true/false;
}
哪一个最好?有没有人知道这两种选择的利弊?
提前致谢.
我今天正在编写一个C++类,我编写了一个函数,它将参数作为参考而不是指针,这是我很少做的事情.我总是通过指针传递.所以我准备改回来,然后我意识到 - 我不知道我是否应该,或者它是否重要.
所以我转向你们.我有三种传递参数的方法:
//1: By pointer
Object* foo(Object* bar) {...}
//2: By reference
Object& foo(Object& bar) {...}
//3: By value (just for completeness)
Object foo(Object bar) {...}
Run Code Online (Sandbox Code Playgroud)
假设#3出于性能原因(是的,我知道编译器已经相当好,但仍然如此),其他两个或多或少相当.
那么:什么是"最好的"方法?指针?参考文献?两者的某种组合?或者甚至重要吗?技术原因是最好的,但风格的原因同样好.
更新: 我接受了YeenFei的答案,因为它处理了为我提供的差异(即使我然后明确地忽略了他的建议 - 我喜欢将NULL作为选项......).但每个人都提出了很好的观点 - 特别是GMan(在评论中)和Nemo,在回答性能和价值传递的过程中.如果您在这里寻求答案,请检查所有答案!
我遇到了这个输出参数约定,它更喜欢指针而不是引用。
“在函数参数列表中,所有引用都必须是常量:
void Foo(const string &in, string *out);
事实上,在 Google 代码中,输入参数是值或常量引用,而输出参数是指针,这是一个非常强大的约定。输入参数可以是const 指针,但我们绝不允许非常量引用参数,除非约定需要,例如swap()。”
这似乎与这个问题的公认答案有些不同,后者说应该使用引用来代替,除非该函数涉及一些指针算术。
所以我想知道这input param is const reference, output param is pointer是否只是谷歌风格的问题,还是一种更普遍接受的做法(以避免非常量引用参数)。
我在许多帖子中读过Stack Overflow,当使用指针(用于参数或返回值)并且nullptr允许(使其成为可选)时,通常最好使用std::optional.
但是,如果指针指的是多态类型怎么办?最好使用std::optional还是指针?
非常简单,我正在重新学习C++,而且我正在指点.我理解基本概念,但我遇到了一些麻烦.调用此函数的语法是什么?
void getTime(int& hours, int& minutes, int& seconds) const
{
hours = hr;
minutes = min;
seconds = sec;
}
Run Code Online (Sandbox Code Playgroud)
正如您可能已经猜到的那样,函数的关键是将小时,分钟和秒的时间返回到位于函数调用所在范围内的三个指针.假设已经定义了hr,min和sec .
此外,如果有人想详细说明指针(特别是何时使用&何时使用*),将非常感激.预先感谢.
让我们假设我们有一个statically(Type mObject;)创建的对象,它通过使用getObject()方法向程序员公开.我想知道以这种方式获取对象有哪些优点和缺点?
Type* SomeClass::getObject() {
return &mObject;
}
// the programmer types
Type* obj = someClassObj.getObject();
obj->someMethod();
Run Code Online (Sandbox Code Playgroud)
这样:
Type& SomeClass::getObject() {
return mObject;
}
// the programmer types
Type& obj = someClassObj.getObject();
obj.someMethod();
Run Code Online (Sandbox Code Playgroud) 我有一个关于这个程序的问题。我是编程和 C++ 的初学者,我试图弄清楚两件事。
为什么这个程序没有编译(错误:使用未初始化的内存“总计” - 我将它定义为一个变量??)。
有人能解释一下 main ( sumUpTo)之外的函数是如何工作的吗?具体& vec和total,因为我从来没有见过他们。谢谢。
/* 1) read in numbers from user input, into vector -DONE
2) Include a prompt for user to choose to stop inputting numbers - DONE
3) ask user how many nums they want to sum from vector -
4) print the sum of the first (e.g. 3 if user chooses) elements in vector.*/
#include <iostream>
#include <string>
#include <vector>
#include <numeric> //for accumulate
int …Run Code Online (Sandbox Code Playgroud) c++ ×11
pointers ×3
reference ×2
coding-style ×1
const ×1
operators ×1
optional ×1
performance ×1
stdvector ×1