#include <iostream>
#include <vector>
#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>
using namespace std;
struct TestMe
{
TestMe() : i(10), j(20) {}
int i;
int j;
};
int main()
{
// Case I:
//vector<const int> vec;
/*
/usr/local/gcc-4.8.1/include/c++/4.8.1/ext/new_allocator.h:93:7: error: 'const _Tp* __gnu_cxx::new_allocator<_Tp>::address(__gnu_cxx::new_allocator<_Tp>::const_reference) const [with _Tp = const int; __gnu_cxx::new_allocator<_Tp>::const_pointer = const int*; __gnu_cxx::new_allocator<_Tp>::const_reference = const int&]' cannot be overloaded
address(const_reference __x) const _GLIBCXX_NOEXCEPT
*/
// Case II:
//vector<const TestMe> vecTest;
// Case III:
//boost::shared_ptr<vector<const TestMe>> shVecTestMe;
//shVecTestMe = boost::make_shared<vector<const TestMe> >();
return 0;
}
我曾嘗試在兩個編譯器上面的代碼:使用<const T>`
1>http://www.compileonline.com/compile_cpp11_online.php
2> MS VS2010
第一編譯器不能接受所有的情況下(即案例一,案例二,案例三)。 但是,MS VS2010接受了所有這些。
問題1>案例是否有意義?換句話說,是否有必要使用
vector<const int>
vector<const TestMe>
boost::shared_ptr<vector<const TestMe>>
以防止包含的值被稍後修改。
問題2>爲什麼兩個編譯器在這些情況下有不同的響應。基於C++標準哪一個是正確的?
謝謝
爲了給你一個答案,不允許你在每個標準的STL容器中使用const。這樣做會導致未定義的行爲。類似的線程:http://stackoverflow.com/questions/4940419/vc-allows-to-use-const-types-for-stl-containers-why – jakebower