我是C ++的新手,仍然在努力学习语法和最佳实践。
我已经使用单个参数定义了一个方法:
void foo(const std::string& name)
1)这是否是一个函数的正确参数声明,该函数将接受用户定义的字符串,例如main方法?
2)如果这是正确/推荐的语法,那么样本参数的实例化会是什么样的?
答案 0 :(得分:8)
是的,这是正确的语法。您可以通过以下几种方式调用它并提供参数:
使用字符串文字:
foo("bar");
使用字符串变量:
std::string b = "bar";
foo(b);
使用函数返回类型字符串的结果:
std::string quux();
foo(quux());
使用char*
变量:
int main(int argc, char const* argv[]) {
foo(argv[0]);
}
答案 1 :(得分:2)
我不确定我是否完全理解你的问题,但我会尽力澄清它。
您使用术语'方法'。我假设你的方法被封装在一个类中?如果是,那么: -
在头文件中(例如source.h),
class dog
{
...
public:
void foo(const std::string &name);
...
};
在源文件中(例如source.cpp)
void dog::foo(const std::string &name)
{
// Do something with 'name' in here
std::string temp = name + " is OK!";
}
在你的'main'函数中,你可以实例化你的'dog'类,并调用'foo'函数,如: -
void blah()
{
dog my_class;
my_class.foo("Testing my class");
}
如果你想要一个函数(即一个未封装在一个类中的'方法'),那么你拥有的是正确的。
在源文件中(例如source.cpp)
void foo(const std::string &name)
{
// Do something with 'name' in here
std::string temp = name + " is OK!";
}
如果您希望能够从该特定源文件外部调用您的函数,您还需要在头文件中转发声明您的函数。
在头文件中(例如source.h)
void foo(const std::string &name);
要调用您的功能,
void blah()
{
foo("Testing my class");
}
希望这有帮助!
答案 2 :(得分:1)
这是否是一个函数的正确参数声明,该函数将接受用户定义的字符串,例如main方法?
是
#include <string>
using namespace std;
void foo(const string& name)
答案 3 :(得分:1)
1) 如果函数foo()不意味着更改字符串,那么这是一个正确的参数声明。 'const'关键字用于表示接收器不会更改字符串。 如果你在foo()中编写修改字符串的代码,你将得到编译器错误/警告。
2)
std::string theString = "Hello";
foo( theString );
答案 4 :(得分:0)
1)是的,如果您只需要读取函数中的字符串,这是一个非常好的方法。
2)没有实例化?
答案 5 :(得分:0)
1)对于大多数功能,它将是一个很好的签名。但是,由于您提到main()
,因此只有两个有效签名:
int main()
int main(int argc, const char* argv[])
...正如您所看到的,由于C-legacy兼容性(和效率),您必须使用C风格的字符串
2)不确定我理解你的第二个问题,但由于std::string
有一个带有const char *的构造函数,你可以说:
foo("hello");
或:
std::string input;
std::cout << "Enter some text: ";
std::cin >> input;
foo(input);