Sul*_*hur 3 c++ string pass-by-reference c++11
我几乎没有C ++经验。我的问题更多是关于确认某些查询是否正确思考。我试图理解一个代码,它包含以下行:
string ltrim(const string &);
Run Code Online (Sandbox Code Playgroud)
我看到了以下答案:1 .“ std :: string const&s”和“ const std :: string&s”之间有什么区别? 2. https://www.geeksforgeeks.org/stdstring-class-in-c/ 3. https://codereview.stackexchange.com/questions/32842/passing-parameters-by-reference
我知道按值调用和按引用调用的概念。
在我看来,这是在此处声明的函数名称,因为我知道C ++没有使用该名称的预定义函数。我是否正确地假设这意味着它是一个名为'ltrim'且类型为'string'的函数,并且此函数具有一个参数'a constant string type'。
但是,通常我们具有以下功能:
void abc (int &a)
Run Code Online (Sandbox Code Playgroud)
其中a是变量。什么是变量:
string ltrim(const string &);
Run Code Online (Sandbox Code Playgroud)
因为'const'具有预定义的含义,而'string'是数据类型。参数中传递的变量是什么?
我试图在互联网上寻找一些信息,但是我无法深入到一个用字符串来解释这一点的地方。
什么是“ ltrim”?
您的猜测是正确的,ltrim
(left-trim)是一个接受a const std::string&
作为参数并返回a 的函数std::string
。实际上,我们不需要像以前一样给参数指定名称,因为我们还没有使用该参数。一旦定义了函数主体,我们将只使用它,当前代码行仅是函数的声明。
另外,如果没有变量,则“&”在这里做什么。我知道通过引用可以调用C ++,但是我看不到变量名,也不知道用来传递什么。
仅仅因为没有变量名并不意味着该函数不能要求对某种类型的引用。引用类型是类型的一部分,而不是变量的名称,参数的名称是完全可选的:
void Foo(int, const int&, int*)
{
// stuff..
}
int main()
{
Foo(1, 2, nullptr);
}
Run Code Online (Sandbox Code Playgroud)
只要Foo
不尝试访问参数,此代码就完全合法。不能因为他们没有名字。
拆分声明和定义并在一个参数中给一个名称而不在另一个参数中给一个名称也完全有效:
void Foo(int);
int main()
{
Foo(1);
}
void Foo(int bar)
{
// stuff with 'bar'...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
96 次 |
最近记录: |