草庐IT

const_iterators

全部标签

c++ - 为什么Visual C++在C中而不是从C++中警告从const void **到void *的隐式强制转换?

概要当C程序试图将指向const数据的指针(如constvoid**或constchar**)转换为void*时,MicrosoftVisualStudio中的C/C++编译器会给出警告C4090(即使这种类型实际上并非指向const的指针)。更奇怪的是,同一个编译器静默地接受作为C++编译的相同代码。这种不一致的原因是什么?为什么VisualStudio(与其他编译器不同)在将指向const的指针隐式转换为void*时存在问题?细节我有一个C程序,其中将通过变量参数列表传递的C字符串读入数组(通过调用va_arg的循环)。由于C字符串的类型为constchar*,因此跟踪它们的数组的

c++ - 使用结构化绑定(bind)标记为 const 的变量不是 const

我一直在编写一组类来实现类似python的简单zip函数。以下代码段(几乎)按预期工作。但是a和b这两个变量不是const。std::vectorv1{0.0,1.1,2.2,3.3};std::vectorv2{0,1,2};for(autoconst&[a,b]:zip(v1,v2)){std::cout我一直在使用gcc7.3.0。这是MCVE:#include#include#includetemplateclasszip_iterator{usingvalue_iterator_type=std::tuple()))...>;usingvalue_type=std::tupl

c++ - 使用结构化绑定(bind)标记为 const 的变量不是 const

我一直在编写一组类来实现类似python的简单zip函数。以下代码段(几乎)按预期工作。但是a和b这两个变量不是const。std::vectorv1{0.0,1.1,2.2,3.3};std::vectorv2{0,1,2};for(autoconst&[a,b]:zip(v1,v2)){std::cout我一直在使用gcc7.3.0。这是MCVE:#include#include#includetemplateclasszip_iterator{usingvalue_iterator_type=std::tuple()))...>;usingvalue_type=std::tupl

c++ - 用 str(const char*) 设置 std::stringstream 的内容会产生奇怪的后果

我使用std::stringstream广泛用于生成代码。在使用str()设置内容时,我遇到了一些奇怪的行为。函数,然后使用operator.有人可以向我解释这种行为。非常感谢-谢谢。示例一:std::stringstreamssa;ssa.str("Settingstring");std::cout输出:Settingstringaddingtostring预期:SettingstringSettingstringaddingtostring所以在阅读了一些文档之后,我发现我应该将打开模式设置为ios_base::ate:std::stringstreamssb(std::ios_b

c++ - 用 str(const char*) 设置 std::stringstream 的内容会产生奇怪的后果

我使用std::stringstream广泛用于生成代码。在使用str()设置内容时,我遇到了一些奇怪的行为。函数,然后使用operator.有人可以向我解释这种行为。非常感谢-谢谢。示例一:std::stringstreamssa;ssa.str("Settingstring");std::cout输出:Settingstringaddingtostring预期:SettingstringSettingstringaddingtostring所以在阅读了一些文档之后,我发现我应该将打开模式设置为ios_base::ate:std::stringstreamssb(std::ios_b

c++ - 对临时对象成员的 const 引用

这个问题在这里已经有了答案:Aboutbindingaconstreferencetoasub-objectofatemporary(3个回答)关闭6年前。常量引用延长函数返回的临时对象的生命周期是C++的knownfeature,但是对函数返回的临时对象的成员使用常量引用是否可以接受?示例:#includestd::pairgetPair(intn){return{std::to_string(n),n};}intmain(int,char*[]){constintx=123456;constauto&str=getPair(x).first;printf("%d=%s\n",x,s

c++ - 对临时对象成员的 const 引用

这个问题在这里已经有了答案:Aboutbindingaconstreferencetoasub-objectofatemporary(3个回答)关闭6年前。常量引用延长函数返回的临时对象的生命周期是C++的knownfeature,但是对函数返回的临时对象的成员使用常量引用是否可以接受?示例:#includestd::pairgetPair(intn){return{std::to_string(n),n};}intmain(int,char*[]){constintx=123456;constauto&str=getPair(x).first;printf("%d=%s\n",x,s

c++ - 为什么绑定(bind)到引用类型时 "const auto [x, y]"的行为不符合预期?

以下代码片段摘自cppref:std::tuplef();auto[x,y]=f();//decltype(x)isint//decltype(y)isint&constauto[z,w]=f();//decltype(z)isconstint//decltype(w)isint&我的问题在最后一行:为什么是decltype(w)int&而不是constint&? 最佳答案 Jarod42回答了评论中的问题,让我在这里引用标准的相关部分,来自[dcl.struct.bind]¹:GiventhetypeTidesignatedbys

c++ - 为什么绑定(bind)到引用类型时 "const auto [x, y]"的行为不符合预期?

以下代码片段摘自cppref:std::tuplef();auto[x,y]=f();//decltype(x)isint//decltype(y)isint&constauto[z,w]=f();//decltype(z)isconstint//decltype(w)isint&我的问题在最后一行:为什么是decltype(w)int&而不是constint&? 最佳答案 Jarod42回答了评论中的问题,让我在这里引用标准的相关部分,来自[dcl.struct.bind]¹:GiventhetypeTidesignatedbys

c++ - 我们需要 std::as_const() 做什么?

C++11给了我们std::add_const;使用C++17,我们有一个新结构-std::as_const().前者只是在您提供的类型之前添加一个const。第二个是适当的(a的模板)函数,而不是类型特征,它似乎做同样的事情-除了当类型是右值引用时,在这种情况下它不能使用。我不太明白提供std::as_const()的动机。为什么除了std::add_const之外我们还需要它? 最佳答案 “需要”是一个强词...std::as_const存在是因为它有用,而不是绝对必要。由于它是一个函数而不是一个trait,我们可以使用它来“添