#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_5Done.
但它根本没有输出任何东西.当我替换A a(std :: string(szTmp));同
A a(szTmp);,一切都好.很长一段时间我很困惑.
A a(std::string(szTmp));
This is a function declaration,信不信由你!所以,没有构建A.
相反,写下这个:
A a{std::string(szTmp)};
或者,由于存在对std :: string的隐式转换,因此以下任何一个都足够:
A a{szTmp};A a(szTmp);总结
以上是内存溢出为你收集整理的关于C中构造函数的奇怪行为全部内容,希望文章能够帮你解决关于C中构造函数的奇怪行为所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)