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