C++ 函数参数寿命

C++ 函数参数寿命,c++,C++,我认为在函数调用之后,发送给函数的所有右值参数都将被销毁。我完全搞砸了这个例子。有人能帮我吗?也许是一些它解释的链接 class Test { public: Test(const char* name) : ptr(nullptr) { ptr = name; } ~Test() { printf("%s\n", ptr); system("PAUSE"); } cons

我认为在函数调用之后,发送给函数的所有右值参数都将被销毁。我完全搞砸了这个例子。有人能帮我吗?也许是一些它解释的链接

class Test
{
public:
    Test(const char* name)
        : ptr(nullptr)
    {
        ptr = name;
    }

    ~Test()
    {
        printf("%s\n", ptr);
        system("PAUSE");
    }

    const char* ptr;
};

int main()
{
    Test t("Hello");
}
“Hello”
是字符串文本。字符串是具有静态生存期的基本值。与
42
相同:该数字永远不会被销毁


其他消息:

  • 将ptr初始化为null,并在一纳秒后分配给它,这很复杂,因此可能会浪费程序员的时间。只需将其初始化为应有的值

  • 在程序结束时暂停程序没有任何意义,可能是一个实际问题,所以不要这样做。要在从某个IDE运行程序时查看其输出,请使用适当的方式运行它。例如,Visual Studio中的Ctrl+F5

  • 对数据成员采用一些特殊的命名约定通常是个好主意。例如,
    ptr
    ,或
    myPtr
    ,或
    myPtr
    ,或
    mPtr
    (我更喜欢第一个)。但是,不要像一些初学者那样使用OTP,因为这与用于保持C和C++实现全局名称分离的约定冲突。

“Hello”
是字符串文字。字符串是具有静态生存期的基本值。与
42
相同:该数字永远不会被销毁


其他消息:

  • 将ptr初始化为null,并在一纳秒后分配给它,这很复杂,因此可能会浪费程序员的时间。只需将其初始化为应有的值

  • 在程序结束时暂停程序没有任何意义,可能是一个实际问题,所以不要这样做。要在从某个IDE运行程序时查看其输出,请使用适当的方式运行它。例如,Visual Studio中的Ctrl+F5

  • 对数据成员采用一些特殊的命名约定通常是个好主意。例如,
    ptr
    ,或
    myPtr
    ,或
    myPtr
    ,或
    mPtr
    (我更喜欢第一个)。但是,不要像一些初学者那样使用OTP,因为这与用于保持C和C++实现全局名称分离的约定冲突。


我真的不明白你的问题是什么。这并不短,争论的生命周期在函数调用结束的同时结束。您希望得到什么样的输出?什么是proiblem?@Sean83所以当构造器完成时,“Hello”会被销毁?不!应该是参数而不是参数。我真的不明白你的问题是什么。这并不短,争论的生命周期在函数调用结束的同时结束。您希望得到什么样的输出?什么是proiblem?@Sean83所以当构造器完成时,“Hello”会被销毁?不!应该是参数而不是参数。非常感谢,我不知道基本值静态寿命。非常感谢,我不知道基本值静态寿命。