【发布时间】:2014-04-10 22:12:49
【问题描述】:
#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 中是公开的?
这是错误吗? 如果是,Visual Studio 的下一个版本(vs2012 和 vs2013)怎么样?
编辑:我只是测试其他容器,而且...有趣的向量和 unique_ptr 的非静态成员也是公共的。
std::vector<char> v;
v._Myfirst = (char*)2; // Well Compiled.
std::unique_ptr< int > u;
u._Myptr = 0; // well compiled.
问:这里有使用public 数据成员的任何理由或优势吗?
【问题讨论】:
-
我不认为这是一个错误,但它确实让我也想到了
"Why?"。 +1! -
我也可以确认这在 VS2013 中做同样的事情。
-
它肯定是一个错误,由于这个类不变量会继续折腾。
-
_Myresin std::string 也是公开的
标签: c++ visual-studio-2010 visual-studio-2012