C++ 传递字符串指针,然后检查构造函数/方法中的大小时出现问题

C++ 传递字符串指针,然后检查构造函数/方法中的大小时出现问题,c++,string,object,C++,String,Object,我仍在学习字符串,但我正在尝试更频繁地使用它们。我怎么能让这样的东西工作呢?我甚至不知道从哪里开始 (是的,这是一个物体。我也在学习这些atm机,以便进行作业) 这里有一个关于使用的小说明 MyClass::MyClass(const std::string& newName) 您不需要指向字符串的指针。参考更好-因此& 构造函数不应该修改这个字符串-告诉编译器和开发人员-因此const 不要污染您的命名空间-因此std:: 不要使用std使用(参见3) 这里有一个关于使用的小说明 M

我仍在学习字符串,但我正在尝试更频繁地使用它们。我怎么能让这样的东西工作呢?我甚至不知道从哪里开始 (是的,这是一个物体。我也在学习这些atm机,以便进行作业)


这里有一个关于使用的小说明

MyClass::MyClass(const std::string& newName)
  • 您不需要指向字符串的指针。参考更好-因此
    &
  • 构造函数不应该修改这个字符串-告诉编译器和开发人员-因此
    const
  • 不要污染您的命名空间-因此
    std::
  • 不要使用std使用
    (参见3)

  • 这里有一个关于使用的小说明

    MyClass::MyClass(const std::string& newName)
    
  • 您不需要指向字符串的指针。参考更好-因此
    &
  • 构造函数不应该修改这个字符串-告诉编译器和开发人员-因此
    const
  • 不要污染您的命名空间-因此
    std::
  • 不要使用std使用
    (参见3)

  • 作为教育署答案的另一种选择:

    如果确实要使用指针,则构造函数应如下所示:

    MyClass::MyClass(const std::string* const newName)
    {
      if (newName!=nullptr && newName->length() > maxNameLength) //maxNameLength = 50
      {  
        //do stuff
      }
    }
    
    不是要调用
    length()
    操作符->
    。如果需要更改指针或其内容,可以跳过一个
    const
    限定符


    无论如何,使用参考文献通常是更好的选择。

    作为Ed回答的替代方案:

    如果确实要使用指针,则构造函数应如下所示:

    MyClass::MyClass(const std::string* const newName)
    {
      if (newName!=nullptr && newName->length() > maxNameLength) //maxNameLength = 50
      {  
        //do stuff
      }
    }
    
    不是要调用
    length()
    操作符->
    。如果需要更改指针或其内容,可以跳过一个
    const
    限定符



    无论如何,使用引用通常是更好的选择。

    您不需要指针位-请尝试
    MyClass::MyClass(const std::string&newName)
    这似乎很有效,谢谢。现在我必须试着理解原因。去读一本关于C++的书,你不需要指针位-试试
    MyClass::MyClass(const std::string&newName)
    ,这似乎很有效,谢谢。现在我必须试着去理解为什么。去读一本关于C++的书。问题是——如果传递一个空指针会发生什么?最好让编译器选择一个好的点,补充说。正如我所说,使用引用通常是更好的方法……可能是一个
    断言
    ?由于OP没有给我们任何关于其操作的信息,如果字符串超过maxLength,我只是决定检查nullptr,如果是,则不“//do stuff”。问题是-如果传递空指针会发生什么?最好让编译器选择一个好的点,补充说。正如我所说的,使用引用通常是更好的方法……可能是一个
    断言
    ?因为OP没有给我们任何关于他在字符串超过maxLength时的行为的信息,所以我决定检查nullptr,如果是这样的话,就不要“//do”你能准确地解释一下这个名称空间std的内容吗?我发现我并不总是把“std::string str1”放在“string str1”上,这是一种糟糕的做法吗?如果是这样,我应该使用char吗。您可以想象,我的类有一个私有数据成员,即“字符串名”,因此我调用构造函数来更改它。如果您能够执行
    string str1
    ,那么某个地方(可能是您)有一行
    使用std
    。这会污染名称空间,因为它包含很多东西。你能解释清楚这些吗?我发现我并不总是把“std::string str1”放在“string str1”上,这是一种糟糕的做法吗?如果是这样,我应该使用char吗。您可以想象,我的类有一个私有数据成员,即“字符串名”,因此我调用构造函数来更改它。如果您能够执行
    string str1
    ,那么某个地方(可能是您)有一行
    使用std
    。这会污染名称空间,因为它包含很多东西。见等