草庐IT

Operators

全部标签

c++ - '&' 在 C++ 声明中做了什么?

我是一名C人,我正在尝试理解一些C++代码。我有以下函数声明:intfoo(conststring&myname){cout函数签名与等效的C:有何不同:intfoo(constchar*myname)使用string*myname与string&myname有区别吗?C++中的&和C中的*表示指针有什么区别?同样:conststring&GetMethodName(){...}&在这里做什么?是否有一些网站解释了&在C和C++中的不同用法? 最佳答案 “&”表示引用而不是指向对象的指针(在您的情况下是常量引用)。拥有这样的功能的好

c++ - '&' 在 C++ 声明中做了什么?

我是一名C人,我正在尝试理解一些C++代码。我有以下函数声明:intfoo(conststring&myname){cout函数签名与等效的C:有何不同:intfoo(constchar*myname)使用string*myname与string&myname有区别吗?C++中的&和C中的*表示指针有什么区别?同样:conststring&GetMethodName(){...}&在这里做什么?是否有一些网站解释了&在C和C++中的不同用法? 最佳答案 “&”表示引用而不是指向对象的指针(在您的情况下是常量引用)。拥有这样的功能的好

c++ - 您可以在 C++ 中制作自定义运算符吗?

是否可以制作自定义运算符,以便您可以执行此类操作?if("Hello,world!"contains"Hello")...注意:这是一个独立于“...是个好主意”的问题;) 最佳答案 是的!(嗯,有点)有几个公开可用的工具可以帮助您。两者都使用预处理器代码生成来创建实现自定义运算符的模板。这些运算符由一个或多个内置运算符以及标识符组成。由于这些实际上不是自定义运算符,而只是运算符重载的技巧,因此有一些警告:宏是邪恶的。如果你犯了一个错误,编译器将几乎完全无法追踪问题。即使你得到了正确的宏,如果你的操作符的使用或你的操作的定义有错误,

c++ - 您可以在 C++ 中制作自定义运算符吗?

是否可以制作自定义运算符,以便您可以执行此类操作?if("Hello,world!"contains"Hello")...注意:这是一个独立于“...是个好主意”的问题;) 最佳答案 是的!(嗯,有点)有几个公开可用的工具可以帮助您。两者都使用预处理器代码生成来创建实现自定义运算符的模板。这些运算符由一个或多个内置运算符以及标识符组成。由于这些实际上不是自定义运算符,而只是运算符重载的技巧,因此有一些警告:宏是邪恶的。如果你犯了一个错误,编译器将几乎完全无法追踪问题。即使你得到了正确的宏,如果你的操作符的使用或你的操作的定义有错误,

c++ - 为什么 C++ 需要范围解析运算符?

(我知道范围解析运算符的作用,以及如何以及何时使用它。)为什么C++有::操作符,而不是使用.操作符来达到这个目的?Java没有单独的运算符,并且工作正常。C++和Java之间是否存在一些差异,这意味着C++需要单独的运算符才能进行解析?我唯一的猜测是出于优先级原因需要::,但我想不出它为什么需要比.更高的优先级。我能想到的唯一情况是这样的a.b::c;会被解析为a.(b::c);,但我想不出这样的语法在任何情况下都是合法的。也许这只是“他们做不同的事情,所以他们看起来也可能不同”的一个例子。但这并不能解释为什么::的优先级高于.. 最佳答案

c++ - 为什么 C++ 需要范围解析运算符?

(我知道范围解析运算符的作用,以及如何以及何时使用它。)为什么C++有::操作符,而不是使用.操作符来达到这个目的?Java没有单独的运算符,并且工作正常。C++和Java之间是否存在一些差异,这意味着C++需要单独的运算符才能进行解析?我唯一的猜测是出于优先级原因需要::,但我想不出它为什么需要比.更高的优先级。我能想到的唯一情况是这样的a.b::c;会被解析为a.(b::c);,但我想不出这样的语法在任何情况下都是合法的。也许这只是“他们做不同的事情,所以他们看起来也可能不同”的一个例子。但这并不能解释为什么::的优先级高于.. 最佳答案

c++ - 此代码行为是否已定义?

以下代码在控制台打印什么?mapm;m[0]=m.size();printf("%d",m[0]);可能的答案:未定义代码的行为,因为未定义编译器首先执行哪个语句m[0]或m.size()。所以它可以打印1以及0。它打印0因为赋值运算符的右侧首先执行。它打印1因为operator[]具有完整语句的最高优先级m[0]=m.size()。因此,会发生以下一系列事件:m[0]在map中创建一个新元素m.size()被调用,现在是1m[0]被赋值为之前返回的(通过m.size())1真正的答案?,我不知道^^ 最佳答案 我认为未指定0或1是

c++ - 此代码行为是否已定义?

以下代码在控制台打印什么?mapm;m[0]=m.size();printf("%d",m[0]);可能的答案:未定义代码的行为,因为未定义编译器首先执行哪个语句m[0]或m.size()。所以它可以打印1以及0。它打印0因为赋值运算符的右侧首先执行。它打印1因为operator[]具有完整语句的最高优先级m[0]=m.size()。因此,会发生以下一系列事件:m[0]在map中创建一个新元素m.size()被调用,现在是1m[0]被赋值为之前返回的(通过m.size())1真正的答案?,我不知道^^ 最佳答案 我认为未指定0或1是

c++ - 使 operator<< 成为虚拟的?

我需要使用虚拟virtualfriendostream&operator我得到编译器错误Error1errorC2575:'operator我怎样才能把这个算子变成虚拟的? 最佳答案 这个设置的问题是你上面定义的operatorclassMyClass{public:virtualostream&operator意思是MyClassmyObject;cout不会编译,但是MyClassmyObject;myObject将是合法的。要解决此问题,您可以应用软件工程基本定理-任何问题都可以通过添加另一层间接来解决。与其将operator

c++ - 使 operator<< 成为虚拟的?

我需要使用虚拟virtualfriendostream&operator我得到编译器错误Error1errorC2575:'operator我怎样才能把这个算子变成虚拟的? 最佳答案 这个设置的问题是你上面定义的operatorclassMyClass{public:virtualostream&operator意思是MyClassmyObject;cout不会编译,但是MyClassmyObject;myObject将是合法的。要解决此问题,您可以应用软件工程基本定理-任何问题都可以通过添加另一层间接来解决。与其将operator