草庐IT

const_iterators

全部标签

c++ - 为什么在 C++ 中不允许初始化整数成员变量(不是 const static)?

当我尝试在类定义中初始化一个int成员变量时,我的C++编译器报错。它告诉“只能在类中初始化静态常量整数数据成员”。您能否解释此限制背后的基本原理(如果可能,举例说明)。 最佳答案 因为目前的标准是不允许的。AccordingtoBjarne,您将能够在C++0x中执行此操作。如果您确实需要它,请尝试将编译器设置为C++0x(GCC中的-std=c++0x)并查看您的编译器是否支持它。 关于c++-为什么在C++中不允许初始化整数成员变量(不是conststatic)?,我们在Stack

c++ - 指向 const char 与 char 数组与 std::string 的指针

这里有两行代码constchar*s1="test";chars2[]="test";两行代码具有相同的行为,所以我看不出我应该更喜欢s1而不是s2还是相反。除了s1和s2,还有使用std::string的方式。我认为使用std::string的方式是最优雅的。在查看其他代码时,我经常看到人们使用constchar*或chars[]。因此,我现在的问题是,什么时候应该使用constchar*s1或chars[]或std::string?有什么区别,在什么情况下我应该使用哪种方法? 最佳答案 POINTERS--------charc

c++ - 为什么我们需要将 const 放在函数头的末尾,但首先是 static?

我有这样的代码...classTime{public:Time(int,int,int);voidset_hours(int);voidset_minutes(int);voidset_seconds(int);intget_hours()const;intget_minutes()const;intget_seconds()const;staticvoidfun();voidprintu()const;voidprints();private:intx;inthours;intminutes;intseconds;constinti;};为什么我需要在最后放置const来创建一个函数

c++ - const 是否允许在此处进行(理论上的)优化?

考虑这个片段:voidfoo(constint&);intbar();inttest1(){intx=bar();inty=x;foo(x);returnx-y;}inttest2(){constintx=bar();constinty=x;foo(x);returnx-y;}在我对标准的理解中,x和y都不允许被test2中的foo改变>,而它们可以通过test1中的foo进行更改(例如使用const_cast从constint&因为引用的对象在test1中实际上不是const。现在,neithergccnorclangnorMSVC似乎将test2优化为foo(bar());retu

c++ - 为什么 T const&& 不是转发引用?

在模板上下文中,应用以下“引用折叠”规则:templatevoidfoo(T&&t){//T&&->T&//T&&&->T&//T&&&->T&//T&&&&->T&&}为什么该语言禁止“通用引用”具有const限定符?templatevoidfoo(Tconst&&t)如果类型已解析为引用(4种情况中的3种),这似乎是有意义的。我确信这个想法与该语言的其他一些设计方面不兼容,但我不能完全看到全貌。 最佳答案 最初右值引用提案说如果P就会发生转换。是“右值引用类型”。However,adefectreport后来注意到了Additi

c++ - 支持 std::ostream operator << 中的 const_string

我目前正在使用非常聪明的包boost::const_string直到http://libcxx.llvm.org/可以在Ubuntu或GCC上预先打包,使其成为__versa_string(在headerext/vstring.h中)它的默认字符串实现。libcxx的std::string以及__versa_string默认使用_small-string优化(SSO)。默认支持输出到std::ostream然而缺乏。代码#include#includeconst_stringx;std::cout除非我们强制x否则不起作用通过c_str()进入C字符串这变成了std::cout它按预期

c++ - 为什么 gcc 允许 const 对象没有用户声明的默认构造函数但不允许 clang?

最近Whydoesaconstobjectrequiresauser-provideddefaultconstructor?被标记为WhydoesC++requireauser-provideddefaultconstructortodefault-constructaconstobject?的拷贝.我正在使用coliru和rextexter测试不同版本的gcc(g++-4.7、g++-4.8、g++-4.9)和clang(3.4和3.5),看看新版本的编译器是否引入了这种行为。这里我们有两个测试用例,分别来自两个问题:classA{public:voidf(){}};intmain(

c++ - 为什么 range-for 找不到我对 std::istream_iterator 的开始和结束重载?

我有这样的代码std::ifstreamfile(filename,std::ios_base::in);if(file.good()){file.imbue(std::locale(std::locale(),newdelimeter_tokens()));for(auto&entry:std::istream_iterator(file)){std::cout哪里std::istream_iterator的begin()和end()定义如下templatestd::istream_iteratorbegin(std::istream_iterator&stream){returns

c++ - '_ITERATOR_DEBUG_LEVEL' : value '0' doesn't match value '2' 检测到不匹配

使用VS2010构建时,我正在构建一个导致许多此类链接错误的库:errorLNK2038:mismatchdetectedfor'_ITERATOR_DEBUG_LEVEL':value'0'doesn'tmatchvalue'2'导致我必须同时发布我的库的发行版和调试版。我没有理由发布lib的调试版本,它只会使二进制分发版膨胀。但是在调试中构建的客户端代码拒绝链接到我的发布库。我以前见过这个问题,但他们似乎没有问正确的问题。我明白这个错误是什么,以及为什么我会得到它(好吧,有点;我不确定到底是什么发出了依赖性。你呢?),但我想知道的是如何消除这种依赖性的发生在我的库中?类似于在使用冲

c++ - 使用 extern const 将结构传递给模板。什么是外部?

我在问自己为什么下面的代码有效,以及说明符extern在实例化baz_instance时做了什么:structbaz{intvalue;};externconstbazbaz_instance={3};templateintfoo(){returnb.value;}intmain(){foo();return1;}为什么上面的代码首先编译,如果省略extern说明符,为什么它不再编译?extern说明符在此示例中的作用是什么? 最佳答案 这是从C++03到C++11的标准部分之一。在C++03中,[temp.arg.nontype]