非Const引用綁定到臨時的VisualStudio錯誤?我是在編譯一些可移植代碼時遇到這個問題的。gcc..基本上,這段奇怪的代碼是在VisualStudio中編譯的,它真的讓我大吃一驚:class Zebra {int x;};Zebra goo() {Zebra z; return z;}void foo(Zebra &x){
Zebra y;
x = y;
foo(goo());}Visual studio讓這個飛吧。gcc將此捕獲為編譯錯誤。有趣的是,如果你從Zebra到int,VC++會抱怨的。相當矛盾的行為。思想?
2 回答
www說
TA貢獻1775條經驗 獲得超8個贊
這是VisualStudio的舊擴展,我可以在Microsoft站點上找到的唯一引用是以下錯誤報告:臨時對象可以綁定到非const引用。,它具有以下示例代碼:
struct?A?{};A?????f1();void?f2(A&);int?main(){
????f2(f1());?//?This?line?SHALL?trigger?an?error,?but?it?can?be?compiled?without?any?????errors?or?warnings.}其中一份答復指出:
存在4級警告(如果將/w4傳遞給編譯器,則啟用4級警告)。
Visual C+是如此的自由。在這一擴展部分中,注意到:
使用禁用語言擴展(/za)會導致錯誤:
蝴蝶刀刀
TA貢獻1801條經驗 獲得超8個贊
正如其他人所說,這要歸功于MicrosoftC+擴展。盡管/Za不建議使用標志,因為它會破壞事物。
相反,請使用/permissive-切換到更好的標準遵從性,您將得到這些情況下的健康錯誤。請注意,此標志可從VS 2017開始使用。
開關/za不支持某些關鍵的MicrosoftSDK頭文件。相反/允許性-提供了一種有用的一致性模式,其中輸入C+代碼根據ISO C+規則進行解釋,但也允許在VisualC+支持的目標上編譯C+所需的一致性擴展。
- 2 回答
- 0 關注
- 485 瀏覽
添加回答
舉報
0/150
提交
取消
