草庐IT

const-overloaded

全部标签

c++ - 如何从 QString 获取 const char *

我从一个UTF8编码的XML文件中读取了一个字符串。我将这个值存储在QString对象中,并将它与其他一些信息连接起来。我可以在QtCreator调试器中看到QString包含所需的值。我需要将此字符串传递给另一个采用constchar*参数的库。请问如何获取constchar*?我试过toLocal8bit()、toLatin1()、toUtf8()都没有成功。好像我错过了什么...... 最佳答案 Ineedtopassthisstringtoanotherlibrarythattakesaconstchar*argument.

c++ - "Overloading"具有不同参数集的纯虚函数

考虑以下代码示例#includeusingnamespacestd;classColor{public:virtualvoidmixColors(Color&anotherColor)=0;};classRGB:publicColor{public:voidmixColors(RGB&anotherColor);};voidRGB::mixColors(RGB&kol){returnRGB(0xABCDEF);}我完全知道为什么这段代码不起作用(RGB中的mixColors()没有实现纯虚函数,因为它有不同的参数集)。但是我想问一下是否有另一种方法可以解决这个问题。假设我想混合颜色,但

c++ - operator const Base&() 是否应该用于不可访问的基类?

我希望有一个类允许访问其基本情况的const接口(interface),但不允许访问其他类。特别是:classB{};classA:privateclassB{public:operatorconstB&(){return*this;}};intmain(){Aa;constB&b=a;//Shouldthislinebeanerror?}g++给出了一个不可访问的基类错误。你们那里的语言专家认为这个错误在C++11/C++14中是正确的吗?是的,我意识到我可以(并且将会)这样做:intmain(){Aa;constB&b=a.operatorconstB&();}对这个构造的另一种方

c++ - 对成员的 const 引用是否安全

如果我使用对另一个成员的const引用,这个引用有可能失效吗?classClass{public:constint&x{y};private:inty;};例如,当我在vector中使用此类的实例时这会在push_back之后增加其容量。根据标准,所有迭代器和引用都无效,如果vector必须增加其容量。引用之后还有效吗? 最佳答案 目前这是不安全的,因为当您复制Class的实例时,x将引用复制对象的y,而不是它自己的y。您可以通过运行以下代码来查看:intmain(){Classa{};std::vectorvec;vec.push

c++ - 数组可以声明为 const 变量而不是 constexpr 的大小吗?

这段C++代码是否正确?constsize_ttabsize=50;inttab[tabsize];问题是我已经看到很多关于这个问题的相互矛盾的意见。甚至##c++IRCchannel和编程论坛上的人也声称截然不同的事情。有人说上面的代码是正确的。其他人则认为不是,应该是这样的:constexprsize_ttabsize=50;inttab[tabsize];既然我已经被“C++专家”的相互矛盾的意见搞得够糊涂了,我能请问一个合理的支持答案吗?非常感谢! 最佳答案 在C++中,常量整数的处理方式与其他常量类型不同。如果它们是用编译

c++ - 为什么 `const type& variable` 作为函数输入?

我正在将一些函数从Matlab转换为C++,其中有一些与矩阵有关。我在Internet的某处找到了这个简单的函数:typedefstd::vector>Matrix;Matrixsum(constMatrix&a,constMatrix&b){size_tnrows=a.size();size_tncols=a[0].size();Matrixc(nrows,std::vector(ncols));for(inti=0;i谁能解释一下为什么他们使用constMatrix&a而不是Matrixa作为输入?他们是否习惯使用它,或者使用它有什么好处,因为我没有看到2个版本(constMatr

c++ - 如何解决模板参数推导中的 const/non-const 冲突

我有一个接受std::pair的函数模板以及其中一种类型的值。我想使用来自std::map的条目调用此函数作为对参数。#include#includetemplatevoiddo_stuff(std::pairconst&pair,T1const&val){//Imaginethatthisdoessomethingimportant...}intmain(){std::mapfoo{{0,0.0}};do_stuff(*foo.begin(),0);}编译失败,因为map条目的类型是std::pair,所以T1的类型推导有冲突的类型:constint通过pair参数,和int通过va

c++ - const 左值引用和右值引用之间的重载解析

#include#includevoidfnc(conststd::string&){std::cout所有编译器都选择std::string&&版本的fnc,这是合乎逻辑的,因为创建了临时的std::string用于引用绑定(bind),但我找不到它在C++14标准中的描述。我在那里找到了一段(3.2):—StandardconversionsequenceS1isabetterconversionsequencethanstandardconversionsequenceS2if[...]—S1andS2arereferencebindings(8.5.3)andneitherre

c++ - 防止为非常量对象调用 const 函数

以下代码包含operator()的常量和非常量版本.ItoutputsNon-constop,falseConstop,trueConstop,trueConstop,true即如果类型为S的对象之一,则调用const版本是const或者如果提交的指针是const-行//2,//3,//4.现在我想要//2行的代码导致编译时错误,即我希望const版本只能在const对象上调用。显然是一个static_assert在is_const_v不管用。还有其他想法吗?我知道,将非常量变量转换为常量变量很容易。但这至少会使误用变得明显。#include#includestructS{voidop

c++ - 从 "foo<T>"转换为 "const foo<const T>"- C++

我有一个类似的函数(请不要关心通过引用返回临时值。这只是一个解释问题的例子),constfoo&get_const(){foof;returnf;}这显然无法编译。我正在寻找一种方法来确保调用者不会更改T的foo.我怎样才能确保这一点?我已经看到boost::shared_ptr的类似行为.shared_ptr可转换为constshared_ptr.我不知道它是怎么做到的。任何帮助都会很棒。 最佳答案 编译器看到foo和foo作为两种完全不同且不相关的类型,所以foo与任何其他转换一样,类需要明确支持这一点。如果您可以控制foo类,