草庐IT

const_buffers

全部标签

c# - 为什么从 Java 和 C# 中删除 constness?

我知道这已经讨论过很多次了,但我不确定我是否真的理解为什么Java和C#设计者选择从这些语言中省略这个特性。我对如何制定变通办法(使用接口(interface)、克隆或任何其他替代方法)不感兴趣,而是对决定背后的基本原理感兴趣。从语言设计的角度来看,为什么这个功能被拒绝了?P.S:我使用了诸如“省略”之类的词,有些人可能会觉得这不够用,因为C#是采用加法(而不是减法)方法设计的。但是,我之所以使用这些词,是因为该功能在设计这些语言之前就存在于C++中,因此在从程序员的工具箱中删除的意义上省略了它。 最佳答案 在this采访中,安德斯

c++ - 容器及其内容的 const 与非 const

带有容器类,如std::vector,有两个不同的常量概念:容器的概念(即它的大小)和元素的概念。好像std::vector混淆了这两者,使得下面的简单代码无法编译:structA{A(size_tn):X(n){}int&x(inti)const{returnX[i];}//error:X[i]isnon-const.private:std::vectorX;};请注意,即使std::vector的数据成员(指向数据开始和结束以及分配缓冲区结束的三个指针)没有通过调用它的operator[]来改变,该成员不是const——这不是很奇怪的设计吗?还要注意,对于原始指针,这两个常量概念被

c++ - 为什么类型 const double 没有被 lambda 从到达范围捕获,但 const int 是?

我似乎不明白为什么下面的constint类型的代码会编译:intmain(){usingT=int;constTx=1;autolam=[](Tp){returnx+p;};}$clang++-clambda1.cpp-std=c++11$虽然这个类型为constdouble的不是:intmain(){usingT=double;constTx=1.0;autolam=[](Tp){returnx+p;};}$clang++-clambda2.cpp-std=c++11lambda1.cpp:5:32:error:variable'x'cannotbeimplicitlycapture

c++ - 为什么 unique_ptr operator-> 不是 const-overloaded?

std::unique_ptr::operator->有签名pointeroperator->()constnoexcept;所以operator->是const但返回一个可变指针。这允许如下代码:voidmyConstMemberFunction()const{myUniquePtrMember->nonConstFunction();}为什么标准允许这样做,以及防止上述使用的最佳方法是什么? 最佳答案 把它想象成一个普通的指针:int*consti;是const指向非const的指针int.您可以更改int,但不是指针。intc

c++ - 无法将 'const pointer const' 传递给 const ref

假设你有一组指针(是的......):std::setmyTypeContainer;然后假设你想从SomeType的const方法中搜索这个集合:boolSomeType::IsContainered()const{returnmyTypeContainer.find(this)!=myTypeContainer.end();}这不起作用。方法中的thisptr是一个constSomeType*const,我无法放入find。问题是find采用const-ref,在这种情况下,这意味着传递的指针被视为const,而不是它指向的东西。有没有办法顺利解决这个问题(不改变设置的模板类型)?

C++ 重载运算符两次,一次返回非 const 引用,另一次返回 const 引用,偏好是什么?

我用相同的参数列表重载了一个运算符两次。但返回类型不同:T&operator()(par_list){blablabla}constT&operator()(par_list){blablabla}那么当我调用()运算符时,会根据什么偏好或情况调用哪个函数?我知道如果我在const函数下调用(),它必须是constT&。我只是好奇C++如何处理这种情况以及默认首选项如何工作。谢谢 最佳答案 这些函数不会互相重载;它们具有相同的签名,因此尝试重新定义相同的函数,这是一个错误。返回类型不是函数签名的一部分。要重载一个函数,您必须声明另一

c++ - 如何将字符串与 const char* 进行比较?

#include#include#include#includeusingnamespacestd;intmain(){stringcmd;while(strcmp(cmd.c_str(),"exit")==0&&strcmp(cmd.c_str(),"\exit")==0){cin>>cmd;cout我被卡住了。 最佳答案 std::string实例可以使用!=或==运算符直接与字符串文字进行比较。这使您的比较更加清晰。请注意,\e不是有效的字符转义,如果您的意思是文字\\,则需要将\加倍。while(cmd=="exit"&&c

c++ - 复制 const char*

我从函数接收一个c字符串作为参数,但我收到的参数将在稍后被销毁。所以我想复制它。这就是我的意思:classMyClass{private:constchar*filename;public:voidfunc(constchar*_filename);}voidMyClass::func(constchar*_filename){filename=_filename;//Thisisn'tgoingtowork}我想要实现的不是简单地将一个内存地址分配给另一个内存地址,而是复制内容。我希望文件名为“constchar*”而不是“char*”。我尝试使用strcpy,但它要求目标字符串是非

c++ - 双 const 声明

我经常看到下面的函数声明:some_func(constunsignedchar*constbuffer){}知道为什么const在指针名称之前重复吗?谢谢。 最佳答案 第一个const表示指向的数据是常量,不可更改,而第二个const表示指针本身不可更改:charmy_char='z';constchar*a=&my_char;char*constb=&my_char;constchar*constc=&my_char;a=&other_char;//fine*a='c';//errorb=&other_char;//error*

c++ - 如何初始化 const std::pair?

假设我有一个:#includeusingnamespacestd;typedefpairmy_pair;如何初始化constmy_pair? 最佳答案 使用它的构造函数:constmy_pairp(1,2); 关于c++-如何初始化conststd::pair?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1231788/