草庐IT

const_set

全部标签

c++ - 改变 const std::string 引用的引用

我正在研究C++中的引用,并注意到一些我无法解释的奇怪行为。我的理解是,如果我有一个非常量变量和对同一变量的const引用,然后修改非常量变量,该引用应该反射(reflect)该修改。例子:voidfoo(){intx=5;constint&y=x;x=10;std::cout为我生成以下输出:x=10y=10但是,如果我将类型更改为std::string,const引用似乎不会反射(reflect)修改后的变量:voidfoo(){std::stringx="abc";conststd::string&y=x;x="xyz";std::cout为我生成以下内容:x=xyzy=abc这

c++ - 当我在 C++ 中将临时 int 分配给 const 引用时会发生什么?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Doesaconstreferenceprolongthelifeofatemporary?假设我有一个函数f:intf(intx){returnx;}constint&a=f(1);我知道f(1)只是一个临时的,我会在这条语句之后被销毁,但是将引用设为const会使f(1)的生命周期更长吗?如果是,f(1)将存储在哪里?这是否意味着x在超出范围时也没有被销毁?f(1)和x有什么区别?

c++ - 无效的模板相关成员函数模板推导 - 认为我正在尝试使用 std::set

我有一个继承自基类模板的类模板。基类模板有一个数据成员和一个我想从父类(superclass)中调用的成员函数模板。我知道为了消除对成员函数模板的调用的歧义,我必须使用template关键字,我必须明确提及this在父类(superclass)中。this->base_member_obj.templatemember_function();这一切都很好,只是我使用的代码库犯了一个相当不幸的错误,即导入了整个namespacestd。,我试图调用的模板成员函数称为set.框架中的某处std::set包含在内,这导致GCC认为我正在尝试声明std::set而不是调用成员函数set.GCC

c++ - 无法将 'LPCWSTR {aka const wchar_t*}' 转换为 'LPCSTR {aka const char*}

我一直在尝试让Glew和opengl3.2在win32上下文中使用代码块(minGW)。我找到了一个不错的小教程here因为我一直在努力弄清楚在代码块中编译glew是否真的可行,所以我想在学习教程之前先试用一下源代码,看看它是否可行。在稍微调整代码后,我尝试编译并遇到了几个我以前从未见过的错误。它们如下|Infunction'boolcreateWindow(LPCWSTR,int,int)':||73|error:cannotconvert'LPCWSTR{akaconstwchar_t*}'to'LPCSTR{akaconstchar*}'inassignment||80|erro

c++ - 为什么参数修饰符(即 'const' 或 'volatile' )不被视为函数类型或签名的一部分?

请注意,以下两个函数具有相同的类型和签名:voidfoo1(intt){}//foo1hastype'void(*)(int)',andsignature'(*)(int)'voidfoo2(constintt){}//Alsotype'void(*)(int)',signature'(*)(int)'(const不是函数类型或函数签名的一部分)。同样,返回类型上的修饰符(const或volatile)不会影响函数类型或函数签名。但是,在函数定义本身(未显示)中,命名变量t确实在foo2中保持const资格。有许多StackOverflow问题在讨论为什么函数的返回类型不被视为函数签名

c++ - 为什么非 const、非 int/enum 静态数据成员必须在定义之外初始化?

我知道只有静态、常量和int/枚举(c++11之前)的数据成员才能在类声明中初始化。“所有其他静态数据成员必须在全局命名空间范围内定义(即在类定义的主体之外)并且只能在这些定义中初始化”。为什么不能在类定义中初始化其他静态数据成员?是否有具体原因禁止这样做?如果数据成员特定于类,为什么它们在全局命名空间范围内声明,而不是在与其类相关的某些范围内声明? 最佳答案 Whycan'totherstaticdatamembersbeinitializedintheclassdefinition?Wasthereaspecificreason

c++ - 我们什么时候应该为 `std::unordered_set` 提供我们自己的哈希函数

当我编译下面的代码时,我看到了与Hash相关的错误。intF_no_meaningA(unordered_set>&setVec,vector&vec){setVec.insert(vec);return1;}intmain(){vectorW{2,3,7};unordered_set>setVec;}$g++--versiong++(Ubuntu/Linaro4.6.3-1ubuntu5)4.6.3$g++$1.cpp-o$1-g-Wall-Weffc++-pedantic-std=c++0x/tmp/ccCQFQ4N.o:Infunction`std::__detail::_Has

c++ - 带有返回 const 引用的隐式转换运算符的类的 static_cast<> 行为

我有以下类(class)(精简后只包含相关部分):#includeclassText{private:std::string_text;public:Text(std::string&&text):_text(std::move(text)){}operatorconststd::string&()const{return_text;}};我的问题是:如果我想获得一个conststd::string&,我可以这样做而不会受到任何惩罚吗:Texttext("fred");auto&s=static_cast(text);或者这会构造一个我最终得到引用的中间std::string吗?这种情

c++ - 对指针的 const 引用未按预期运行

为什么我在运行时会遇到错误?我原以为ptr_ref无法修改ptr指向的地址,但事情似乎没有按计划进行。intb=3;int*ptr=&b;//sayssomethingaboutcannotconvertint*totypeconstint*&constint*&ptr_ref=ptr;提前致谢,15岁的C++菜鸟 最佳答案 ptr_ref不是声明为指向int的指针的const引用,而是指向指向constint,所以你有一个类型不匹配。你必须做int*const&ptr_ref=ptr;

C++ 指向 const 指针的 const 数组的指针

我创建了一个常量指针的常量数组,如下所示:constchar*constsessionList[]={dataTable0,dataTable1,dataTable2,dataTable3};指向此数组的常规非常量指针的正确语法是什么?我以为它会是constchar**,但编译器不这么认为。 最佳答案 如果您确实需要一个指向数组的指针,如您的标题所示,那么语法如下:constchar*const(*ptr)[4]=&sessionList; 关于C++指向const指针的const数组的