C ++ - 定义/实例化字符串的语法

时间:2009-11-02 22:11:49

标签: c++ syntax

我是C ++的新手,仍然在努力学习语法和最佳实践。

我已经使用单个参数定义了一个方法:

void foo(const std::string& name)

1)这是否是一个函数的正确参数声明,该函数将接受用户定义的字符串,例如main方法?

2)如果这是正确/推荐的语法,那么样本参数的实例化会是什么样的?

6 个答案:

答案 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);