我觀察到奇怪的行爲在g ++ 4.6.3。當通過調用類的構造函數創建一個臨時File(arg)
編譯器選擇忽略的arg
存在和解析表達式爲File arg;
調用構造函數與成員作爲參數分析爲變量定義
- 爲什麼成員名稱忽略?
- 標準說的是什麼?
- 如何避免它? (不使用新的
{}
語法) - 是否存在相關的編譯器警告? (我可以用一個任意字符串ARG,它仍然會默默耕耘)
代碼:
#include <iostream>
class File {
public:
explicit File(int val) : m_val(val) { std::cout<<"As desired"<< std::endl; }
File() : m_val(10) { std::cout<< "???"<< std::endl;}
private:
int m_val;
};
class Test {
public:
void RunTest1() { File(m_test_val); }
void RunTest2() { File(this->m_test_val); }
void RunTest3() { File(fhddfkjdh); std::cout<< "Oops undetected typo"<< std::endl; }
private:
int m_test_val;
};
int main()
{
Test t;
t.RunTest1();
t.RunTest2();
t.RunTest3();
return 0;
}
輸出:
$ ???
$ As desired
$ Oops undetected typo
只有當您創建對象或使用新位置時,才能直接調用構造函數。 – chris
'fhddfkjdh'如何工作?這是無處定義的,應該會導致編譯錯誤? – RvdK
@PoweRoy,它被視爲:'File fdfdsfsda()' – Xyand