我注意到下面的代碼與最近的編譯器編譯:結構名稱不遮蔽變量名
int main()
{
int x;
struct x;
x = 210; // ←
}
我記得它沒有編譯若干年前。
是否在C++ 11或C++ 14中更改了查找規則以使此代碼「工作」(因此打破了使用struct variable_name;
作爲確保在以下代碼中不使用該變量的方法)?
更新: 顯然我記得正確。我已經驗證,即使用Visual C++ 2010.然而編譯行的代碼,用於參數時struct
名稱是在內部範圍和陰影,就像在此代碼:
void foo(int x)
{
struct x;
x = 210; // ← Error
}
int main()
{
}
因此我已經選擇作爲「解決方案」答案是沒有變化;規則總是這樣。
AFAIK變量名稱和類標記具有不同的作用域,因此可以位於相同的命名空間 –
@AngelusMortis:是的,問題涉及上一條語句中的賦值。感謝您指出模糊性。定影。 –
_「我記得幾年前沒有編譯過。」_你能給我們一些可以檢查的具體例子嗎?編譯器版本和標誌?我不同意你的回憶。 –