草庐IT

const_buffers

全部标签

c++ - const_iterator 与迭代器的比较是否定义明确?

考虑以下代码:#include#includeintmain(){std::vectorvec{1,2,3,5};for(autoit=vec.cbegin();it!=vec.cend();++it){std::cout这里我引入了一个错字:在比较中我调用了vec.end()而不是vec.cend()。这似乎与gcc5.2一样工作。但它实际上是根据标准明确定义的吗?iterator和const_iterator可以安全地比较吗? 最佳答案 令人惊讶的是,C++98和C++11并没有说可以将iterator与const_iterat

c++ - 为什么 int 指针的 const vector 中的取消引用元素是可变的?

我不确定constvector的真正含义所以我编译了下面的代码以获得一个想法,但现在更加困惑了。vectorv;intx=1,y=2;v.push_back(&x);v.push_back(&y);constvectorw=v;w[0]=&y;//failed.Elementisaconstantpointer?*(w[0])++;//failed.Elementpointerreferencestoconstantvalue?如果我停在这里,我会假设constvector是constint*const的vector,但后来我尝试了以下显然与该假设相矛盾的方法。*(w[0])+=3;/

c++ - 为什么 int 指针的 const vector 中的取消引用元素是可变的?

我不确定constvector的真正含义所以我编译了下面的代码以获得一个想法,但现在更加困惑了。vectorv;intx=1,y=2;v.push_back(&x);v.push_back(&y);constvectorw=v;w[0]=&y;//failed.Elementisaconstantpointer?*(w[0])++;//failed.Elementpointerreferencestoconstantvalue?如果我停在这里,我会假设constvector是constint*const的vector,但后来我尝试了以下显然与该假设相矛盾的方法。*(w[0])+=3;/

C++ - enum vs. const vs. #define

文末在此:http://www.learncpp.com/cpp-tutorial/45-enumerated-types/,它提到了以下内容:最后,与常量变量一样,枚举类型会显示在调试器中,在这方面它们比#defined值更有用。上面的粗体字是怎么实现的?谢谢。 最佳答案 考虑这段代码,#defineWIDTH300enumeconst{eWidth=300};constintWidth=300;structsample{};intmain(){samples;intx=eWidth*s;//error1inty=WIDTH*s;

C++ - enum vs. const vs. #define

文末在此:http://www.learncpp.com/cpp-tutorial/45-enumerated-types/,它提到了以下内容:最后,与常量变量一样,枚举类型会显示在调试器中,在这方面它们比#defined值更有用。上面的粗体字是怎么实现的?谢谢。 最佳答案 考虑这段代码,#defineWIDTH300enumeconst{eWidth=300};constintWidth=300;structsample{};intmain(){samples;intx=eWidth*s;//error1inty=WIDTH*s;

c++ - 使用 "const cv::Mat &"、 "cv::Mat &"、 "cv::Mat"或 "const cv::Mat"作为函数参数的区别?

我已经彻底搜索过,但没有找到直接的答案。将opencv矩阵(cv::Mat)作为参数传递给函数,我们传递的是智能指针。我们对函数内部的输入矩阵所做的任何更改也会改变函数范围之外的矩阵。我读到,通过将矩阵作为const引用传递,它不会在函数内更改。但一个简单的例子表明确实如此:voidsillyFunc(constcv::Mat&Input,cv::Mat&Output){Output=Input;Output+=1;}intmain(intargc,char**argv){cv::MatA=cv::Mat::ones(3,3,CV_8U);std::cout显然,A被更改,即使它是作为

c++ - 使用 "const cv::Mat &"、 "cv::Mat &"、 "cv::Mat"或 "const cv::Mat"作为函数参数的区别?

我已经彻底搜索过,但没有找到直接的答案。将opencv矩阵(cv::Mat)作为参数传递给函数,我们传递的是智能指针。我们对函数内部的输入矩阵所做的任何更改也会改变函数范围之外的矩阵。我读到,通过将矩阵作为const引用传递,它不会在函数内更改。但一个简单的例子表明确实如此:voidsillyFunc(constcv::Mat&Input,cv::Mat&Output){Output=Input;Output+=1;}intmain(intargc,char**argv){cv::MatA=cv::Mat::ones(3,3,CV_8U);std::cout显然,A被更改,即使它是作为

c++ - 将 vector<T> 转换为 vector<const T>

我有一个vector类型的成员变量(其中T是一个自定义类,但它也可以是int。)我有一个函数,我想从中返回一个指向该vector的指针,但我不希望调用者能够更改vector或其项。所以我希望返回类型为constvector*我尝试过的所有类型转换方法都不起作用。编译器一直提示T与constT不兼容。这里有一些代码演示了我正在尝试做的事情的要点;vectora;constvector*b=(constvector*)(&a);此代码无法为我编译。提前致谢! 最佳答案 如果您有constvector您不能修改容器,也不能修改容器中的任何

c++ - 将 vector<T> 转换为 vector<const T>

我有一个vector类型的成员变量(其中T是一个自定义类,但它也可以是int。)我有一个函数,我想从中返回一个指向该vector的指针,但我不希望调用者能够更改vector或其项。所以我希望返回类型为constvector*我尝试过的所有类型转换方法都不起作用。编译器一直提示T与constT不兼容。这里有一些代码演示了我正在尝试做的事情的要点;vectora;constvector*b=(constvector*)(&a);此代码无法为我编译。提前致谢! 最佳答案 如果您有constvector您不能修改容器,也不能修改容器中的任何

c++ - 为什么将 ‘float**’ 转换为 ‘const float**’ 时出现错误?

我有一个接收float**作为参数的函数,我尝试将其更改为采用constfloat**。编译器(g++)不喜欢,发出:从‘float**’到‘constfloat**’的无效转换这对我来说毫无意义,我知道(并已验证)我可以将char*传递给采用constchar*的函数,所以为什么不使用constfloat**? 最佳答案 见WhyamIgettinganerrorconvertingaFoo**→constFoo**?BecauseconvertingFoo**→constFoo**wouldbeinvalidanddangero