请考虑以下代码:
class Test
{
private:
Test() = default;
Test operator=(const Test& rhs) = delete;
};
Test t;
int main() { }
MSVC 12和14(分别是Visual Studio 2013和2015)都拒绝编译,正如预期的那样 - 构造函数是私有的,因此我们无法在类本身之外创建该类型的对象。
但是,现在让我们做一个小改动:
$('body').css('overflow','hidden'); // Setting overflow hidden on body and thus removing the scroll bar
令我惊讶的是,它将在MSVC 12中正常编译(14仍然会出现相同的错误)。为什么会这样?我的第一个想法是,这可能是旧版C ++中的标准行为,但后来我意识到删除构造函数的概念仅在C ++ 11中引入。
这是一个错误吗?
答案 0 :(得分:1)
嗯,MSVC 12确实有部分c ++ 11支持,但我相信编译是一个bug。我遇到了类似的使用MSVC 12,我可以从非静态模板函数访问私有字段,当我显然不应该。这是一个奇怪编译的编码疏忽。我认为这很奇怪,所以我用GCC编译它,果然GCC说“不好!”。我认为它已经在11月的CTP中修复了,因为我似乎无法复制它。