草庐IT

const-char

全部标签

c++ - Const 接收一个 var,我不能将它传递给模板

我想做的是:intconstbitsPerInt=log2(X);bitsetbits(arandomnumber...);但是我得到这个错误:'bitsPerInt'cannotappearinaconstantexpressionerror:templateargument1isinvalid 最佳答案 如果你真的需要它工作,制作你自己的在编译时工作的log2并将它传递给bitset的模板参数。constexprunsignedLog2(unsignedn,unsignedp=0){return(nbits;Liveexampl

c++ - 如果覆盖 char 数组的边界,为什么 strcat_s 会崩溃?

我知道,已经有很多关于这个主题的帖子,但我没有找到任何令人满意的帖子。连谷歌都不是我的friend。所以,首先是我的代码:voidsecureCat(){constintBUFFERSIZE=5;charbuffer[BUFFERSIZE];strcpy_s(buffer,BUFFERSIZE,"01");cout我在带有MSVS2010的Windows上玩过这段代码,遇到了以下问题:strcat_s的第一次调用工作正常,这对我来说很清楚,因为新字符串的大小("01"+"2"+NUL字符)小于缓冲区大小。但是,当超过缓冲区大小时,为什么第二个调用会崩溃?据我了解MSDN,我应该得到一个

c++ - 是否在类外重新声明一个 const 静态变量

在C++Primer4th12.6.2中,建议在类外重新声明一个const静态变量。但是,下面的代码在gcc4.6.3中通过了。#includeusingnamespacestd;classX{public:conststaticinta=1;};//constintX::a;intmain(){Xx;cout我们应该重新声明它吗?附言:根据Potatoswatter的推荐,我添加了一个函数来使用conststatic成员作为引用:constintX::a;voidtest(constint&a){cout如果我们不在X类之外包含constintX::a,则会产生如下错误对“X::a”

c++ - int8_t 和 char : converts between pointers to integer types with different sign - but it doesn't

我正在处理一些嵌入式代码,并且正在从头开始编写一些新东西,因此我更愿意坚持使用uint8_t、int8_t等类型。然而,当移植一个函数时:voidfunctionName(char*data)到:voidfunctionName(int8_t*data)在将文字字符串传递给函数时,我收到编译器警告“在指向具有不同符号的整数类型的指针之间转换”。(即调用functionName("putthistextin");时)。现在,我明白了为什么会发生这种情况,并且这些行只是调试,但我想知道人们认为什么是最合适的处理方式,而不是对每个文字字符串进行类型转换。在实践中,我不认为一揽子类型转换比使用

c++ - 修改 const 对象的可变成员有效吗?

在C++中,您现在可以拥有mutable成员。这给语言增加了一层“逻辑常量”。这些与只读数据有何关系-拥有一个mutable成员会阻止将const类放入.rodata部分吗?classFoo{mutableintbar;public:Foo():bar(0){}voidset(intx)const{bar=x;}};//Canthisbeinaread-onlysection?constFoofoo;intmain(void){//Isthiswell-defined?foo.set(5);} 最佳答案 是的,您可以修改const对

c++ - 全局函数和不明确的参数 NULL 与 char* 在 vs 2013 和 GCC 之间

我试图了解当前C++14标准关于解决模糊函数调用的内容,主要是因为我看到GCC4.9.1和VisualStudio2013更新3之间的差异这是代码(MS和GCC完全相同):#includeusingnamespacestd;voidf(char*str,intchars){coutVisualStudio使用默认vs标志调用f(char*,int)GCC给了我一个编译器错误:重载'f(char*&,NULL)'的调用不明确。gcc仅使用-std=c++11标志。 最佳答案 这取决于NULL的定义。MSVC将其定义为0,因此int重载

c++ - 当 const 引用绑定(bind)到临时引用时,堆栈中会发生什么?

C++标准允许将const引用绑定(bind)到右值,从而延长临时对象的生命周期,直到引用超出范围。但是,我无法弄清楚这实际上是如何编译的,让我用一个例子来解释:std::stringfoo(){returnstd::string("foo");}voidbar(){VeryBigObjectobj;//Perhapsdosomethingwiththebigobject}intmain(int,char**){conststd::string&foo_str=foo();bar();return0;}据我所知,以x86架构为例,首先调用函数foo()并在堆栈中构造字符串对象,这意味着

c++ - 具有 const 成员的对象的优先级队列比较器

我正在尝试实现一个优先级队列,它使用一个对象,该对象具有一个常量成员,用于定义队列中对象的优先级。以下是我正在使用的精简版#include#includeclassEvent{public:Event(float_time):time(_time){};constfloattime;};structEventComp{public:booloperator()(constEvent&a,constEvent&b)const{returna.time,EventComp>events;};intmain(intargc,char*argv[]){EventQueueq;}当我尝试编译(使

c++ - 使用 const bool 引用进行后台任务取消跟踪? (C++)

我有一个桌面应用程序,当用户请求时,某些计算在后台线程中运行。有一个取消按钮。我知道向后台任务发出取消信号的“安全”或“正确”方式(使用Qt信号/槽连接、后台任务轮询的互斥体包装bool值等)。然而,在我看来最简单的事情是在我的主线程类中有一个boolcancelled,它在按下Cancel按钮时同步设置,并传递一个constbool&cancelled到它轮询的后台线程。这种方法是否有任何现实的方法会适得其反? 最佳答案 线程可以在不同的处理器上运行,每个处理器都有自己的缓存。如果bool值是原子的,你可以这样做。否则,您可能会面

C++ --- 错误 C2664 : 'int scanf(const char *,...)' : cannot convert argument 1 from 'int' to 'const char *'

我是C++的新手,我正在尝试构建这个非常简单的代码,但我不明白为什么会出现此错误:Error1errorC2664:'intscanf(constchar*,...)':cannotconvertargument1from'int'to'constchar*'代码如下://lab.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#includeintmain(intargc,char*argv[]){introw=0;printf("Pleaseenterthenumberofrows:");sc