最近我发现了一个使用了关键词and
的代码,这个关键词起到了类似于&&
的作用。那么它们两者是相同的吗?还是存在某些特定条件才能使用它们?
最近我发现了一个使用了关键词and
的代码,这个关键词起到了类似于&&
的作用。那么它们两者是相同的吗?还是存在某些特定条件才能使用它们?
C++标准允许使用&&
这个token来替代and
这个token。
并非所有编译器都能正确实现这一点(有些不会处理,其他的则需要包含一个特殊头文件)。因此,使用and
的代码可能被认为是奇怪的。
事实上,等价性在token级别而不是operator级别上意味着,自从C++11引入了右值引用符号,你可以安排好事情(无需预处理器)使得以下语句成立:
int and _int(string and vector);
是一个有效的函数原型。(它等同于 int&& _int(string&& vector)
。)
<iso646.h>
,据记忆,它是在1995年左右作为C标准的修正案(而非完整版本)引入的,并使用宏定义了and
等内容。 (在C++中,<iso646.h>
通常会导致未定义的行为,因为它使用预处理器来#define
C++语言关键字,但某些C++实现实际上需要它,如果您想要替代标记)。 - Peterand
和&&
没有任何区别。
and
运算符是&&
运算符(二进制或逻辑AND)的另一种表示方式。
您可以在此处查看完整文章 -
They和运算符是它们的名称,即&&
and
运算符是 &&
运算符的替代品。
and
是&&
的另一种名称。 - Petervoid foo(std::string and s)
:-/ (注:原文中有笔误,应为"std::string and s"而非"and"后面缺少"type") - Jarod42X::operator&&(const X &) const
无法为某个类X
重载 - 结果证明他尝试提供了X::operator&&(const X &) const
和X::operator and(const X &) const
- 认为它们是不同的。 - Peter&&
和and
不是等价运算符,但它们是等价的标记。出于这个原因,我决定回答。 - Bathsheba