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);