[英]A strange behavior about constructors in C++
我直接給你看了代碼。
#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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.