草庐IT

C++ 为什么我可以在类定义中初始化静态 const char 但不能初始化静态 const double?

这里有两行代码:staticconstdoubleRYDBERG_CONST_EV=13.6056953;staticconstcharCHAR_H_EDGE='-';第二行编译没有错误,第一行没有编译。(错误:静态数据成员的类内初始化需要'constexpr'...)解决方案显然是在类型之前添加关键字constexpr。这是必需的,因为double不是“整数类型”。但是为什么整数和浮点类型的行为不同呢? 最佳答案 我不认为这是有充分理由的,除非它在历史上有所发展。整数类型的异常(exception)在C++11之前是可取的,因为人

c++ - double 与 char* 歧义为零

我有一个方便的C++类,可以使用double或char*进行初始化。除了参数为零的一种情况外,一切都按预期工作。structVar{Var(doublesrc){}Var(char*src){}};intmain(intargc,char*argv[]){VarA=123;VarB="abc";VarC=0;之前我用int代替double,不知为何还好。如何解决这个问题?PS:我知道我可以使用(double)0或只使用0.0,但有没有办法只允许使用0被接受为double? 最佳答案 您可以通过添加第三个构造函数来消除歧义,该构造函数

c++ - 传递 const char 而不是 std::string 作为函数参数

这是一个新手问题,但我不明白它是如何工作的。假设我有下面这样的功能voidfoo(conststd::string&v){cout以及我程序中的以下调用。foo("hi!");本质上,我将constchar*传递给一个函数参数,该参数是对字符串的const引用,所以我对这个调用有疑问。为了通过引用传递参数,我是否正确地说该变量必须至少在调用期间存在?如果是这样,传递给函数的字符串是在哪里创建的?我可以看到它可以工作:它发生是因为编译器创建了一个临时string并传递给参数或函数吗? 最佳答案 doesithappenbecauset

c++ - 为 char 分配空间

字符串构造通过做得到数据空间newchar[strlen(cp)+1];既然字符串中只有strlen(cp)字符,那多余的字节是干什么用的? 最佳答案 对于special'\0'char表示字符串的结尾。(请记住,C风格的字符串是以空字符结尾的数组)。其他有用的说明:strlen不计算'\0'(这就是为什么你需要这个额外的byte)。strcpy确实复制了'\0'。charstr[7]="String";-自行添加'\0'。charstr[]={'S','t','r','i','n','g'}-没有添加'\0'.charstr[7]

c++ - 将 char[] 数组转换为 byte[] ,反之亦然? C++

将字符数组转换为字节(反之亦然)的最佳方法是什么?解决方案:voidCharToByte(char*chars,byte*bytes,unsignedintcount){for(unsignedinti=0;i 最佳答案 char类型是少数几个具有ANSI标准所保证的大小并且大小为1字节的类型之一。据我所知,C并没有直接定义类型字节。然而,拥有一个名为byte的类型实际上并不是一个字节大小的类型,这简直是太疯狂了。因此,一个简单的类型转换应该可以解决问题。 关于c++-将char[]数组

c# - 将 C# 字符串传递给 C++,并将 C++ 结果(字符串、char*.. 任何)传递给 C#

我尝试了不同的方法,但我对Interop很生气。(这里的字符串不是指变量类型,而是“字符的集合”):我有一个在dll中定义的非托管C++函数,我试图从C#访问该函数,该函数有一个字符串参数和一个字符串返回值,如下所示:stringmyFunction(stringinputString){}C++端的字符串应该是什么?和C#之一?以及为此需要哪些参数DllImport? 最佳答案 我发现最有效的方法是更明确地说明这里发生的事情。在这种情况下,可能不建议使用字符串作为返回类型。一种常见的方法是让C++端传递缓冲区和缓冲区大小。如果它对

c++ - 在 C++ 中初始化 char * 的不推荐方法是什么?

当我在C++中初始化一个本地char*变量时:char*pattern="oggS";编译器警告我:Foo.cpp:34:warning:deprecatedconversionfromstringconstantto‘char*’在C++中不推荐使用的方法是什么?如果重要,下面是我调用编译器的方式(来自Eclipse):g++-4.5-O0-g3-Wall-std=c++0x-c-fmessage-length=0-MMD-MP-MF"Foo.d"-MT"Foo.d"-o"Foo.o""Foo.cpp" 最佳答案 你想要:cons

c++ - "Narrowing conversion from ' int ' to ' char ' inside { }"交叉编译时的合法值

我有一个C++项目,我在我的机器上使用g++编译(编译到“主机”)和使用交叉编译器的ARM处理器(在我的例子中是arm-cortex_a8-linux-gnueabi-g++)。我正在转换为C++0x/11标准,编译初始化列表时出现错误,我可以在以下代码段中重现该错误:intmain(void){charc[1]={-108};}这个程序看起来是正确的,因为-108是char的合法值。使用g++编译它不会产生以下命令行错误:g++example.cc-std=c++0x但是,当我使用交叉编译器进行编译时,如下所示:arm-cortex_a8-linux-gnueabi-g++examp

c++ - 这个头文件是什么意思(virtual const char* what() const throw())?

classmyexception:publicexception{virtualconstchar*what()constthrow(){return"Myexceptionhappened";}};抱歉,这个问题可能听起来很愚蠢,但我无法解析标题。有人可以用英语描述标题的实际含义吗?首先让我觉得奇怪的是关键字virtual。myexception类不是基类,它继承自已经实现的exception类,那么为什么在这里使用virtual呢?我猜const是用于返回类型,它是一个c风格的字符串,它是const,而另一个const是为了确保这个对象不能被修改(有人能告诉我那个物体可能是什么吗?

c++ - 如何连接字符串和 const char?

我需要在c中输入“helloworld”。我该怎么做?stringa="hello";constchar*b="world";constchar*C; 最佳答案 stringa="hello";constchar*b="world";a+=b;constchar*C=a.c_str();或不修改a:stringa="hello";constchar*b="world";stringc=a+b;constchar*C=c.c_str();少量编辑,以匹配111111给出的信息量。当您已经拥有string时s(或constchar*s,