草庐IT

c++ - 双重标准?为什么只对 char* const& a = "bla"发出警告?

在尝试深入研究thisquestion等案例背后的机制之后暴露了,我仍然不明白为什么下面代码中的第三行只生成警告,而第二行是错误。intmain(){constchar*const&a="bla";//Validcodeconstchar*&a2="bla";//Invalidcodechar*const&a3="bla";//Shouldbeinvalidbutsettlesforawarningreturn0;}我知道虽然引用初始化正在将字符串文字转换为指针引用,但它不应该删除任何cv-qualifiers对象具有,并且由于转换后的类型是constchar*const(从字符串文字

c++ - `const std::string& s = nullptr` 作为可选参数如何工作

据我所知,引用不能为空,但是当我运行这样的代码时:#include#includevoidtest(inti,conststd::string&s=nullptr){std::cout可选参数s可以为null,构建代码。更重要的是,当test(2)运行时,程序会抛出异常,而不是打印一些随机字符串。当我将s更改为一些基本类型(如int)时,它无法编译,所以我认为魔法留在字符串类中,但如何呢?而且,我如何检查s是否为空?如果我使用if(s==nullptr)或if(s.empty()),它无法编译。 最佳答案 test使用构造函数初始化

c++ - 构造函数定义和声明不匹配

我有以下C++代码,其中声明中构造函数的参数与构造函数的定义具有不同的常量性。//testClass.hppclasstestClass{public:testClass(constint*x);};//testClass.cpptestClass::testClass(constint*constx){}我能够使用g++在没有警告的情况下编译它,这段代码应该编译还是至少给出一些警告?事实证明,64位solaris上的内置C++编译器给了我一个链接器错误,这就是我注意到存在问题的方式。在这种情况下匹配参数的规则是什么?这取决于编译器吗? 最佳答案

C++ 和 const - 访问 const 引用的成员函数

我这里有这段代码。目的是复制initialData。因为我没有以任何方式修改initialData,所以我认为我应该将它作为常量引用传递。但是,我在编译时不断收到此消息。.\src\Scene\SceneAnimationData.cpp(23):errorC2662:'SceneTrackerData::getRect':cannotconvert'this'pointerfrom'constSceneTrackerData'to'SceneTrackerData&'#include"SceneTrackerData.h"voidSceneAnimationData::SetupDa

c++ - 我的 C++ 代码在 MS C++ 编译器上运行完美,但在 g++ 编译器上给我 NaN。为什么?

我正在使用C++模拟涉及多个(27)刚性常微分方程的生物模型。我的程序在MSC++2010表达式编译器下完美运行,但在g++编译器(NetBeans6.8、Ubuntu10.04LTS)下运行失败。问题是一些变量变成了NaN.以下是g++编译器下程序每一步后变量Vm的值:-59.4-59.3993-59.6081100.08134.6378-50392.8nannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannan

c++ - C++ 中方法返回类型和修饰符的顺序重要吗?

我遇到了一个与我目前对C++中方法的理解相冲突的情况。我正在阅读IvorHorton的“BeginningVisualC++2010”(WroxPress)。在第449页的示例8_03中,方法定义为:doubleVolume()const{returnm_Length*m_Width*m_Height;}我将修饰符重新排列为:double**const**Volume(){returnm_Length*m_Width*m_Height;}从我的C#和Java背景来看,我原以为const的位置无关紧要,但在编译时我收到了错误:errorC2662:'CBox::Volume':canno

c++ - 这行代码中的 `const char* yes[5]`代表什么?

我对C++中的typedef有疑问例如:typedefconstchar*yes[5];typedef是否给出了constchar*的替代名称,因此constchar*的替代名称是yes[5]?yes[5]这里代表什么?以及如何创建两个yes数组并初始化两者之一? 最佳答案 没有。这声明了一个yes类型,它是五个constchar*的数组。参见thislink并在文本区域内键入constchar*yes[5];。 关于c++-这行代码中的`constchar*yes[5]`代表什么?,我

c++ - 复制构造继承

structA{virtualvoidwhat(){cout为什么不是b2.m=50?我正在尝试复制一个b对象,并且我有复制构造函数B(constA&x):m(50)。我是否需要为派生类ass复制一个c'tor?像B(constB&x)??我认为既然b对象有一部分,我们可以使用B(constA&x):m(50)而不是默认构造函数::S​​如果你有一个带有A对象参数的函数,你可以传入一个B对象。它与复制构造函数有何不同? 最佳答案 原因是B(constA&x)不是复制构造函数—T类型的复制构造函数必须始终采用对T的左值引用作为第一个(

c++ - 用指针理解 const_iterator?

我试图理解const_iterator的含义。我有以下示例代码:voidCustomerService::RefreshCustomers(){for(std::vector::const_iteratorit=customers_.begin();it!=customers_.end();it++){(*it)->Refresh();}}Refresh()是Customer类中的一个方法,它没有定义为const。起初我以为const_iterator应该禁止修改容器的元素。但是,此代码可以毫无怨言地编译。这是因为正在进行额外级别的间接访问吗?const_iterator究竟是做什么/

C++ 函数返回 const char *

我为单元测试类开发了一个小辅助函数,它需要我的vector并将其转换回constchar*.我写这个是为了将它传递给gtest的ASSERT_STREQ用于简单比较的宏。在这里:constchar*convertVecToChar(std::vector&source){std::vector::size_typesize=source.size();char*data=(char*)malloc(sizeof(char)*(size+1));memcpy(data,&source[0],size);data[size]=0;returndata;}这是一个被调用的例子:ASSERT_