c++ - 在VS2010中,为什么 std::basic_string的成员是 public?

  显示原文与译文双语对照的内容
0 0
#include <iostream>
#include <string>
int main()
{
    std::string s;
    s._Mysize = 7;  // Well compiled !!!
    std::cout << s.size() << 'n'; // prints 7   !!!
}

为什么非静态的成员 std::basic_string是公共在VS2010?

这是bug? 如果是,怎样的下一版本的visual studio ( VS2012和VS2013 )?

编辑: 我只是测试其他容器,和- 有趣的矢量和unique_ptr是非静态的成员是public,也。

std::vector<char> v;
v._Myfirst = (char*)2; // Well Compiled.
std::unique_ptr< int > u;
u._Myptr = 0; // well compiled.

Q : 在这里任何原因或利用使用 public数据成员?

时间:原作者:5个回答

0 0

这并非影响一致性。 不允许你使用标准的C++程序 _Mysize在任何情况下也不可以,以测试这样的成员存在于任何标准库类型。 还是相关部门这样做标准的方式将调度此事件"没有任何要求程序的行为。

2 .11 Identifiers [ lex .name]

3 此外,一些标识符是保留使用的C++实现和标准库( 17 .6 .4 .3 。2 ),否则不要用来,不需要诊断。

17 .6 .3 .3 .2 [ Global名称全局.names]

1 某些保留的名称和函数签名始终设置为执行:

每个名称中含有双下划线 __或以一个下划线开头,后跟一个大写字母( 2 .12 ) 被保留给实现的任何用户。

在某些情况下,它会让更容易MS编写高度优化的特殊非成员函数附加头中不存在时的初始版本,而不修改原始邮件头。 这是一种重大的一些情况下,'直接访问类内部也是防御,而当程序不能声明新函数之一。 friend所以如果这个函数是预料之中的,暴露的内部组件可能是最好的( read: 至少差) 的事情。

那么我就不会太快,但是在它叫bug 。 虽说如此,但是是一种可疑的设计决策中,我怎么也不建议任何人6e0r样式。

原作者:
...