草庐IT

C++运算符重载,我自己的字符串类

我正在尝试在C++11中创建我自己的字符串类,但我遇到了一些问题。将我的类与std::string类进行比较,我不知道如何使用std::string.at(int)='a';方法/重载。我在自己的类中创建了at(int)方法:intat(intindex){if(indexsize-1){throwstd::out_of_range("Error,indexoutofrange");}returndata[index];}如果我只使用它,效果很好:MyString.at(2);在主文件中:MyString="Helloworld!";//Worksfine!MyString.at(2)

c++ - 使用构造函数代替或类型转换运算符

我有以下代码classA{private:intn;public:A(intn):n{n}{}A(constA&a):n{a.n}{}};classB{private:intm;public:B(intn):m{n}{}operatorA()const{returnA(m);}operatorint()const{returnm;}};intmain(int,char**){Bb{1};(A)b;//Failsstatic_cast(b);//Failsb.operatorA();//OK}这失败了callofoverloaded‘A(B&)’isambiguous(gcc,但VC++

c++ - 运算符重载中的 C++ 语法不清晰

我对C++还是个新手,正在尝试理解表达式模板。我在Wikipedia上看到了一个示例代码.我了解大部分程序及其工作原理,但我不清楚编译器如何解释这些行:operatorA&(){returnstatic_cast(*this);}operatorAconst&()const{returnstatic_cast(*this);}来自下面的基本表达式模板类。通常运算符重载的语法是return_datatypeoperator+(args){body}(例如for+operator)但是这会产生错误并且函数中的那些编译没有任何错误。谁能解释一下这两行?运算符之前的A&和Aconst&是做什么

C++ 重载解析、转换运算符和 const

在这种情况下voidf(int*);voidf(constint*);...inti;f(&i);情况很清楚-f(int*)被调用,这似乎是正确的。但是,如果我有这个(这是错误地完成的(*)):classaa{public:operatorbool()const;operatorchar*();};voidfunc(bool);aaa;func(a);operatorchar*()被调用。我不明白为什么这样的决策路径会比使用operatorbool()更好。有什么想法吗?(*)如果将const添加到第二个运算符,代码当然会按预期工作。 最佳答案

c++ - C++ 中大型模的模幂运算失败

这是我用来计算(n^p)%mod的代码。不幸的是,当我从main()方法调用它时,它会因mod的大值(在我的例子中是mod=10000000000ULL)而失败。任何的想法;为什么?ullpowMod(ulln,ullp,ullmod){ullans=1;n=n%mod;while(p){if(p%2==1){ans=(ans*n)%mod;}n=(n*n)%mod;p/=2;}returnans;}这里,ull是unsignedlonglong的类型定义。 最佳答案 是的,您可以在C++中完成。正如其他人所指出的那样,您不能直接这

c++ - 没有可用的可以执行此转换的用户定义转换运算符,或者无法调用该运算符

我有一个奇怪的错误,我不太明白,VS2013。这只是导致相同错误的实际问题的简化。std::functionx=(someCondition==true)?[](){returntrue;}:[](){returnfalse;};VS编译器错误是:1>f:\test\cppconsoleapplication\cppconsoleapplication.cpp(497):errorC2446:':':noconversionfrom'main::'to'main::'1>Nouser-defined-conversionoperatoravailablethatcanperformth

C++ 是否需要重载运算符的特殊右值变体?

在类似OperatorOverloading的问题+答案中,据说重载二元运算符(例如operator+)的最佳方法是:classX{X&operator+=(constX&rhs){//actualadditionofrhsto*thisreturn*this;}};inlineXoperator+(Xlhs,constX&rhs){lhs+=rhs;returnlhs;}因此,operator+本身通过值获取lhs,通过const引用获取rhs,并通过值返回更改后的lhs.我无法理解如果使用右值作为lhs调用这里会发生什么:这仍然是需要的单一定义吗(编译器是否会优化参数和返回值),或

【深度学习】Pytorch 系列教程(四):PyTorch数据结构:2、张量的数学运算(2):矩阵运算及其数学原理(基础运算、转置、行列式、迹、伴随矩阵、逆、特征值和特征向量)

文章目录一、前言二、实验环境三、PyTorch数据结构1、Tensor(张量)1.维度(Dimensions)2.数据类型(DataTypes)3.GPU加速(GPUAcceleration)2、张量的数学运算1.向量运算2.矩阵运算基础运算矩阵的转置矩阵的行列式求矩阵的迹矩阵的逆数学计算伴随矩阵数学计算计算矩阵的特征值和特征向量旧版新版数学计算一、前言  本文将介绍PyTorch中张量的数学运算之矩阵运算,包括基础运算、转置、行列式、迹、伴随矩阵、逆、特征值和特征向量等。二、实验环境  本系列实验使用如下环境condacreate-nDLpython==3.11condaactivateDL

c++ - 声明中的逗号运算符

我正在编写一个C++解析器(实际上是它的一个小子集),但找不到关于为什么在变量初始化中不允许使用逗号运算符的解释。inta=1,2;//throwsa"Expected';'attheendofdeclaration"compilererrora=1,2;//assignstheresultofthecommabinaryoperatortothea(2)inta=(1,2);//doesthesameasabove,becauseparenexpressionisallowedasaninitializerC++规范规定您可以在变量声明中使用表达式作为初始值设定项。为什么不允许逗号二

c++ - [over.sub]/1 中例子中使用的下标运算符是什么意思?

[over.sub]/1例子:structX{Zoperator[](std::initializer_list);};Xx;x[{1,2,3}]=7;//OK:meaningx.operator[]({1,2,3})inta[10];a[{1,2,3}]=7;//error:built-insubscriptoperatoroperator[]声明中的Z是什么?表达式x[{1,2,3}]=7;的可能含义是什么? 最佳答案 WhatisZintheoperator[]declaration?它是函数的返回类型。它根本没有在示例中使用