是否有必要在使用临时字符串值后将其赋值为null ?
Is it necessary to assign null to a temp string value after using it?
假设我有这样一段代码:
else if (array[z] == 1){
string buf = string("00010");
barzip += buf;
string buf = string(NULL);
}
指派NULL是多余的,但因为我要在下一个else if
语句中重用字符串变量?谢谢!
这是多余的。实际上,字符串buf
将在块的末尾超出作用域,因此将调用buf
析构函数。
else if (array[z] == 1)
{
string buf = string("00010");
barzip += buf;
buf = string(NULL); // second declaration would not compile.
}
应该是
else if (array[z] == 1)
{
string buf("00010");
barzip += buf;
// buf goes out of scope here; destructor is called.
// Each iteration through the block will use a newly-constructed buf variable
}
您不需要这样做。变量buf的作用域仅在if语句的else分支中。如果该代码没有运行,则永远不会创建but。同样,如果同样的代码在循环中运行,它每次都是一个新的但是,因为一旦你离开else if分支,但是就被遗忘了。
还可以这样做:
string buf("00010");
代替:
string buf = string("00010");
首先,
string buf = string("00010");
barzip += buf;
string buf = string(NULL);
将无法编译,因为您试图在同一块中声明具有相同名称(buf
)的两个变量。
NULL
。您正在用NULL
初始化一个未命名的临时字符串。这是未定义的行为,这意味着程序运行时任何事情都可能发生。
如果幸运的话,它会立即崩溃,告诉您代码中有错误。如果你不够幸运,它在你执行程序的前20次不会崩溃,也不会做任何有害的事情,在第21次尝试时崩溃,导致无休止的漏洞搜索。
在非法初始化之后,从技术上讲,您确实为buf
分配了未命名的临时字符串,但由于此时行为已经未定义,因此进一步推断它是没有意义的。
似乎你有C背景,并习惯于手动处理char
指针。在c++中,最好在概念上将std::string
对象完全视为内置非指针类型。当int
不再使用时,您是否"清除"它?当然,你不知道。在给double
赋新值之前,你是否"清除"了它?同样,你不需要。所以也不要在std::string
中尝试这样的事情。这没有意义。
相关文章:
- 为"adjacent"变量赋值时出现问题
- C++中的赋值发生,尽管右侧出现异常
- 用C++中的sscanf赋值
- 为std::string的某个索引赋值
- 重载Singly Linked List中的赋值运算符
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- gtest_使用setargpointee在函数中赋值
- 在 Json::Value in JsonCpp 中赋值 [null]
- 赋值null中的不兼容类型
- C++-将null赋值给std::字符串
- 赋值运算符c++NULL赋值
- 赋值时执行char*,以null结束String
- 赋值给允许NULL成员的数组,而不使用堆
- 如果不为null,则为指针赋值
- 是否有必要在使用临时字符串值后将其赋值为null ?
- 我应该检查NULL在我的赋值操作符
- 是否应该将构造函数体中赋值的指针成员初始化为NULL ?
- 每次在链表中调用insert_node()函数时,Head都被赋值为Null
- while循环外的变量在重新赋值时变为NULL
- 通过解引用NULL指针来赋值引用