[閒聊] 使用預設參數建構子當成預設建構子引發的問題
這邊有個程式例子,輸出確是0?
#include <iostream>
using namespace std;
class foo {
public:
int m_a;
inline foo(int a = int()): m_a(a) {}
};
inline void test(const foo& f = foo()) {
cout << f.m_a << endl;
};
int main(int argc, char* argv[]) {
foo O(10);
test(0);
system("pause");
return 0;
}
test(0);本來該打成歐卻打成零
編譯器編譯成功,編譯器把
零 -> foo(零) 帶入副函數裡 輸出當然就變0了
該如何避免這類的問題?
1.全面取消預設參數建構子?
2.引入匈牙利命名法(變數名稱自帶型別辨識符號)?
3.還有其他辦法嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.195.88.23
→
04/12 13:15, , 1F
04/12 13:15, 1F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章