草庐IT

const-reference

全部标签

c++ - 为什么 operator= 返回引用而不是 const 引用

最初的问题与重载operator=有关,我想分享我的发现,因为找到它们对我来说很重要。我无法想象将(a=b)用作左值的合理示例。在IRC和谷歌的帮助下,我找到了下一篇文章:http://msdn.microsoft.com/en-us/magazine/cc301415.aspx它提供了两个示例。(a=b)=cf(T&);f(a=b)但两者都不太好,我认为这是不好的做法。第二个给我同样的感觉。您能否提供更多好的示例,说明为什么它应该是非常量? 最佳答案 一个很好的理由是标准中要求类X在标准容器中可用的要求之一是表达式a=b必须具有类

c++ - 是什么让 const 在机器的较低级别?

当在C++中制作一些东西const时,是什么让你不能在机器的较低级别隐式地传递一个非常量?机器如何判断这是const?(除了const的意思之外...)它是否可能存储在内存的.rdata部分中,或者是否有一些设置使其成为常量,或者它是如何工作的?谁能澄清一下? 最佳答案 const主要是编译时的东西;它并不暗示它们可能在运行时存储在哪里,或者它们是否可能在运行时受到保护。在实践中,编译器可能会选择将常量放在可执行文件的程序部分,这可能会被内存管理单元(如果存在)写保护。或者,编译器可能会将常量直接折叠到代码中,这样它们甚至不会作为可

C++,通过 const 引用访问 std::map 元素

我对const有疑问。说我有:classA{friendstd::ostream&operatorsomeMap;intsomeInteger;};std::ostream&operator由于与map的const冲突,这种代码在编译时会产生错误(如果我注释掉打印map值的那一行就没问题),如果我去掉函数原型(prototype)中的“const”很好。我真的看不出问题在哪里..有什么帮助吗? 最佳答案 std::map::operator[]不是const,因为如果元素不存在,它会插入一个元素。在C++11中,你可以使用std::

c++ - 是否可以将编译时 "reference"赋给变量?

考虑以下代码:Matrix4x4perspective(constViewFrustum&frustum){floatl=frustum.l;floatr=frustum.r;floatb=frustum.b;floatt=frustum.t;floatn=frustum.n;floatf=frustum.f;return{{2*n/(r-l),0,(r+l)/(r-l),0},{0,2*n/(t-b),(t+b)/(t-b),0},{0,0,-((f+n)/(f-n)),-(2*n*f/(f-n))},{0,0,-1,0}};}为了提高构建矩阵的可读性,我必须从平截头体结构中复制值,

c++ - 错误 C2440 : '=' : cannot convert from 'const char [2]' to 'char'

我正在学习C++,但我在做一些新手的事情时遇到了问题。我正在尝试创建一个非常小的应用程序,它接受用户输入并将其存储到一个char数组中。然后我解析该数组并删除所有括号和dases并显示它。像下面这样(325)858-7455到3258587455但是我遇到了错误errorC2440:'=':cannotconvertfrom'constchar[2]'to'char'下面是我的简单代码,可以很容易地放入编译器并运行。#include"stdafx.h"#include#includeusingnamespacestd;/*ThisisatemplateProject*/intmain(

Vitis HLS出现undefined reference to的可能解决办法

问题描述:undefinedreferenceto`cv::namedWindow(std::__cxx11::basic_string,std::allocator>const&,int)'undefinedreferenceto`cv::resizeWindow(std::__cxx11::basic_string,std::allocator>const&,int,int)'undefinedreferenceto`cv::imshow(std::__cxx11::basic_string,std::allocator>const&,cv::_InputArrayconst&)'unde

c++ - 将 const char * 转换为 std::string

这个问题在这里已经有了答案:Howtoconvertaconstchar*tostd::string[duplicate](6个答案)关闭8年前。我有一个从处理函数返回的constchar*,我想将它转换/分配给std::string的实例进一步操纵。这看起来应该是直截了当的,但我找不到任何说明应该如何完成的文档。显然,我错过了一些东西。见解赞赏。

C++ 对 WinMain@16 的 undefined reference (Code::Blocks)

我正在使用Code::Blocks学习C++,每次我尝试创建一个新类时,我都会收到一条错误消息:undefinedreferenceto`WinMain@16'这是我一直在使用的代码:主类#include"Lime.h"#includeusingnamespacestd;intmain(){Limelime;return0;}青柠类(.ccp):#include"Lime.h"#includeusingnamespacestd;Lime::Lime(){cout石灰header(.h):#ifndefLIME_H#defineLIME_HclassLime{public:Lime();

c++ - g++ 将返回的字符串文字视为 const char 指针而不是 const char 数组

当从应该使用g++(版本4.7.3)执行隐式转换的函数返回字符串文字时,我看到了一些奇怪的行为。任何人都可以解释为什么以下代码:#includeclassTest{public:templateTest(constchar(&foo)[N]){printf("Templateconstchararrayconstructor\n");}Test(char*foo){printf("char*constructor\n");}};Testfn(){return"foo";}intmain(){Testt("bar");Testu=fn();return0;}产生结果:Templateco

c++ - C++11 是否允许 vector<const T>?

容器要求已从C++03更改为C++11。虽然C++03有全面的要求(例如vector的复制构造性和可赋值性),但C++11定义了每个容器操作的细粒度要求(第23.2节)。因此,您可以例如将可复制构造但不可赋值的类型(例如具有const成员的结构)存储在vector中,只要您只执行某些不需要赋值的操作(构造和push_back就是这样的操作;insert不是)。我想知道的是:这是否意味着标准现在允许vector?我看不出有什么理由不应该-constT,就像具有const成员的结构一样,是一种可复制构造但不可分配的类型-但我可能错过了一些东西。(部分让我觉得我可能遗漏了一些东西的原因是,如