C++中构造函数的一种奇怪行为

A strange behavior about constructors in C++

本文关键字:一种 构造函数 C++      更新时间:2023-10-16

我直接向您展示代码。

#include <iostream>
#include <stdio.h>
class A {
   public:
   A(const std::string& name){
    std::string aname = "HAHA_" + name;
    std::cout << aname << std::endl;
    }
    ~A(){
         std::cout << "Done." << std::endl;
    }
};
int main() {
   size_t len = 5;
   char szTmp[30] ={0};
   snprintf(szTmp,sizeof(szTmp),"Getlist_V2_%zd",len);
   A a(std::string(szTmp));
   return 0;
}

预期结果如下:

HAHA_Getlist_V2_5
Done.

但它什么也没输出。当我将A a(std::string(szTmp));替换为A a(szTmp);,一切都好。它让我困惑了很长一段时间。

A a(std::string(szTmp));

这是一个函数声明,信不信由你!因此,没有构造A

相反,写下:

A a{std::string(szTmp)};

或者,由于存在到std::string的隐式转换,以下任一项都足够了:

A a{szTmp};
A a(szTmp);