Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;_C++_Gcc - Fatal编程技术网

C++ C++;

C++ C++;,c++,gcc,C++,Gcc,我直接向您展示代码 #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 <<

我直接向您展示代码

#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;
}
但它什么也不输出。当我替换
A(std::string(szTmp))带有
aa(szTmp),一切正常。这让我困惑了很长时间

A a(std::string(szTmp));
,信不信由你!因此,没有构建
A

相反,写下以下内容:

A a{std::string(szTmp)};
或者,由于存在到
std::string
的隐式转换,以下任一项都已足够:

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

在调用ctor查看实际发送的内容之前,您是否尝试过在
szTmp
中输入值?是的,我尝试过。
szTmp
中的值是正确的,
std::string(szTmp)
也是正确的,太奇怪了。您的MCVE缺少
\include
指令。否则,好问题。initailizer列表语法只适用于c++11-双括号(
aa((std::string(szTmp)))
)也适用于较旧的编译器
aa(std::string(szTmp))
A(std::string)相同或其他什么?@clcto:单击我答案中的链接。@Alec:我们现在使用C++14。除非另有限制条件,否则应假定为。你会注意到我给出了一个C++03解决方案。这不是一个“初始列表”。@Alec
A a{szTmp};
A a(szTmp);