给定以下函数,是否会在堆栈中声明每个局部变量?
std::string reallyCoolFunction(unsigned int a)
{
if( a < 20 )
{
std::string result1 = "This function is really cool";
return result1;
}
if( a >=20 && a <= 40 )
{
std::string result2 = "This function is kind of cool";
return result2;
}
if( a > 40 )
{
std::string result3 = "This function is moderately cool";
return result3;
}
std::string result4 = "This function really isn't that cool";
return result4; // remove warning
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,std::string实际上只需要一个,在堆栈上分配所有4个,或者只分配1个吗?
我很好奇以下代码是否有效。静态分析在此构造函数上给出错误。
总结:成员变量'A'是自己初始化的。
总结:成员变量'B'是自己初始化的。
总结:成员变量'C'是自己初始化的。
class Foo
{
public:
Foo(int A, int B, int C);
private:
int A;
int B;
int C;
}
Foo::Foo(int A, int B, int C) :
A(A),
B(B),
C(C)
{}
Run Code Online (Sandbox Code Playgroud)
我知道这不是一个好的做法,可能应该改变,但是我想知道静态分析警告是否是误报并且成员变量是否会被正确初始化。
让我们说在我的链表类中我保留一个指向链表头部的指针......
在我编写此代码时的一个成员函数中...
Node *cur = head;
cur = cur->next;
Run Code Online (Sandbox Code Playgroud)
为什么不改头换面head->next?
如果我写cur = NULL; 会不会成功null?
为什么std::unique_ptr包含删除函数签名作为模板定义的一部分有什么原因?
template<class T, class Deleter = std::default_delete<T>> class unique_ptr;
Run Code Online (Sandbox Code Playgroud)
VS
template< class T > class shared_ptr;
Run Code Online (Sandbox Code Playgroud)