草庐IT

const_buffers

全部标签

c++ - 在另一个 lambda 中捕获一个 lambda 可能会违反 const 限定符

考虑以下代码:intx=3;autof1=[x]()mutable{returnx++;};autof2=[f1](){returnf1();};这不会编译,因为f1()不是const,并且f2没有声明为可变的。这是否意味着如果我有一个接受任意函数参数并在lambda中捕获它的库函数,我总是需要使该lambda可变,因为我不知道用户可以传入什么?值得注意的是,在std::function中包装f1似乎可以解决这个问题(如何?)。 最佳答案 DoesthismeanthatifIhavealibraryfunctionthatacce

c++ - 我什么时候在 C++ 中使用 const volatile、register volatile、static volatile?

我想知道volatile关键字与register、const和static结合的不同用途关键词。我不确定有什么影响,所以我认为:registervolatileintT=10;建议编译器将T存储在寄存器中,T的值可以从外部某处(操作系统、硬件、另一个线程)修改constvolatileintT=10;程序本身不能修改T,但是T可以在代码之外的地方修改。staticvolatileintT=10;如果T是类的数据成员,则意味着该类的所有对象都具有相同的T值,并且T可以从外部某处修改。如果T是文件中的全局变量,则其他文件(属于项目的一部分)中的源代码无法访问T,但可以从外部某处访问T。如果

c++ - 如何使用 const_cast?

我的Student类中有一个私有(private)变量,定义为:constintstudentNumnber;我正在尝试为Student编写一个复制构造函数,并且我需要抛弃constness来执行此操作。不幸的是,我不明白如何使用std::const_cast。这就是我在复制构造函数中尝试做的事情:Student(constStudent&s):Person(p.getName(),p.getEmailAddress(),p.getBirthDate()),school(0),studentNumber(0){school=newchar[strlen(s.school)+1];str

c++ - 为什么 "extern const int n;"不能按预期工作?

我的项目只包含两个源文件:a.cpp:constintn=8;b.cpp:externconstintn;intmain(){//errorLNK2001:unresolvedexternalsymbol"intconstn"(?n@@3HB)intm=n;}我知道有几种方法可以让它发挥作用;但是,我只是想知道为什么它不起作用? 最佳答案 这是因为const默认意味着内部链接,所以您的“定义”在翻译单元之外不可见它出现在哪里。在这种情况下,到目前为止,最好的解决方案是将声明(externintconstn;)在头文件中,并将其包含在

c++ - C++ 编译器是否将按 const 引用 POD 参数传递优化为按拷贝传递?

考虑以下几点:structPoint{doublex;doubley;};doublecomplexComputation(const&Pointp1,constPoint&p2){//p1andp2usedfrequentlyincomputations}编译器是否将传递引用优化为传递复制以防止频繁取消引用?换句话说,将complexComputation转换为:doublecomplexComputation(const&Pointp1,constPoint&p2){doublex1=p1.x;doublex2=p2.x;doubley1=p1.y;doubley2=p2.y;//

c++ - Boost 链接器错误 : Unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::get_system_category(void)"

我刚刚开始第一次使用Boost,详情:我使用的是VisualStudio2008SP1我正在进行x64构建我只使用boost::asio(以及它所具有的任何依赖项)我的代码现在可以编译,我将我的项目指向boost库(在构建x64库之后)并解决了一些简单的问题,现在我面临一个链接器错误:2>BaseWebServer.obj:errorLNK2001:unresolvedexternalsymbol"classboost::system::error_categoryconst&__cdeclboost::system::get_system_category(void)"(?get_s

c++ - const 指针(与指向 const 对象的指针相反)有什么用?

我经常使用指向const对象的指针,像这样......constint*p;这仅仅意味着你不能通过p改变p所指向的整数。但我也看到了对const指针的引用,声明如下......int*constp;据我了解,这意味着指针变量本身是常量——您可以整天更改它所指向的整数,但不能让它指向其他东西。那有什么可能的用途? 最佳答案 当您为嵌入式系统设计C程序或需要引用同一内存的特殊用途程序(共享内存的多处理器应用程序)时,您需要常量指针。例如,我有一个32bitMIPsprocessor有一个littleLCD附在它上面。我必须将LCD数据写

c++ - 为什么复制构造函数参数是 const?

Vector(constVector&other)//Copyconstructor{x=other.x;y=other.y;为什么参数是const? 最佳答案 你得到的答案提到确保ctor不能改变被复制的内容——他们是对的,把const放在那里确实有这种效果。然而,更重要的是临时对象不能绑定(bind)到非常量引用。复制ctor必须引用const对象才能复制临时对象。 关于c++-为什么复制构造函数参数是const?,我们在StackOverflow上找到一个类似的问题:

c++ - execv() 和 const-ness

我经常在C++中使用execv()函数,但是如果某些参数是C++字符串中的,我会因为不能这样做而烦恼:constchar*args[4];args[0]="/usr/bin/whatever";args[1]=filename.c_str();args[2]=someparameter.c_str();args[3]=0;execv(args[0],args);这不会编译,因为execv()采用与constchar*不兼容的char*constargv[],所以我必须使用strdup()将我的std::string复制到字符数组中,这很痛苦。有人知道这是什么原因吗?

C++11 引入了采用 `const char*` 的异常构造函数。但为什么?

Standardlibrarydefect#254其中包括添加新的异常构造函数:std::logic_error::logic_error(constchar*what_arg);std::runtime_error::runtime_error(constchar*what_arg);//etc.给出了这样一种想法,即存储std::string会打开一些与潜在的内存分配问题有关的蠕虫。但是,followinginitiationofadiscussionbyorlpintheLounge,令我震惊的是,除非标准要求what_arg只是一个字符串文字(或指向其他静态存储持续时间缓冲区的