草庐IT

boolean-operations

全部标签

c++ - 有条件的? : operator with class constructor

谁能解释一下为什么c和c1的构造方式不同。我知道我引用了由“?”创建的拷贝运算符,在构造后被销毁,但为什么在第一种情况下它的行为方式不同。我已经测试了它是否优化,但即使从控制台读取条件,我也有相同的结果。提前致谢#includeclassfoo{public:foo(conststd::vector&var):var{var}{};conststd::vector&var;};std::vectorf(){std::vectorx{1,2,3,4,5};returnx;};intmain(){std::vectorx1{1,2,3,4,5,7};std::vectorx2{1,2,3,

c++ - 有一个单独的 "operator new[]"的目的是什么?

看起来operatornew和operatornew[]具有完全相同的签名:void*operatornew(size_tsize);void*operatornew[](size_tsize);并做同样的事情:要么返回一个指向足够大的原始(未以任何方式初始化)内存块的指针,要么抛出异常。当我使用new和operatornew[]创建对象时,operatornew也会在内部调用-当我创建对象数组时使用new[]。上述两个特殊函数在C++内部以完全相同的方式调用,我看不出这两个调用有什么不同的含义。让两个不同的函数具有完全相同的签名和完全相同的行为的目的是什么?

c++ - 有一个单独的 "operator new[]"的目的是什么?

看起来operatornew和operatornew[]具有完全相同的签名:void*operatornew(size_tsize);void*operatornew[](size_tsize);并做同样的事情:要么返回一个指向足够大的原始(未以任何方式初始化)内存块的指针,要么抛出异常。当我使用new和operatornew[]创建对象时,operatornew也会在内部调用-当我创建对象数组时使用new[]。上述两个特殊函数在C++内部以完全相同的方式调用,我看不出这两个调用有什么不同的含义。让两个不同的函数具有完全相同的签名和完全相同的行为的目的是什么?

c++ - 重载 'operator+' 必须是一元或二元运算符错误

听从giveninthisanswer的建议,我在我的简单Point类中重载了+运算符,如下所示(+=重载工作正常)。Pointoperator+(Pointp1,constPoint&p2){returnstd::move(p1+=p2);}但我收到一个错误提示overloaded'operator+'mustbeaunaryorbinaryoperator(has3parameters)怎么了? 最佳答案 听起来您已将运算符声明为成员函数。成员函数采用隐式第一个参数,这意味着您的运算符现在采用三个参数。您可以通过将其设为非成员函

c++ - 重载 'operator+' 必须是一元或二元运算符错误

听从giveninthisanswer的建议,我在我的简单Point类中重载了+运算符,如下所示(+=重载工作正常)。Pointoperator+(Pointp1,constPoint&p2){returnstd::move(p1+=p2);}但我收到一个错误提示overloaded'operator+'mustbeaunaryorbinaryoperator(has3parameters)怎么了? 最佳答案 听起来您已将运算符声明为成员函数。成员函数采用隐式第一个参数,这意味着您的运算符现在采用三个参数。您可以通过将其设为非成员函

c++ - 为什么在 std::cout 上显式调用 operator<< 会导致意外输出?

我只是好奇如果我调用operator会发生什么在std::cout明确地因为我了解到a.operator()与a()完全相同.所以我这样做了,它打印出一些奇怪的东西:#includeusingstd::cout;intmain(){cout.operatorOutput:0x80486a0奇怪的是,它会输出一个地址(您的地址可能不同,但它仍然应该是一个地址)。我在想这是字符串的地址,所以我尝试取消引用它以使其输出字符串:*(cout.operator但是我得到一个很长的错误nomatchforoperator*in'*std::cout.std::basic_ostream我觉得这很奇

c++ - 为什么在 std::cout 上显式调用 operator<< 会导致意外输出?

我只是好奇如果我调用operator会发生什么在std::cout明确地因为我了解到a.operator()与a()完全相同.所以我这样做了,它打印出一些奇怪的东西:#includeusingstd::cout;intmain(){cout.operatorOutput:0x80486a0奇怪的是,它会输出一个地址(您的地址可能不同,但它仍然应该是一个地址)。我在想这是字符串的地址,所以我尝试取消引用它以使其输出字符串:*(cout.operator但是我得到一个很长的错误nomatchforoperator*in'*std::cout.std::basic_ostream我觉得这很奇

c++ - 哪个值更好用? boolean 真还是整数 1?

这有意义吗? 最佳答案 booleantrue是一个boolean值。当你想表达满足某个二元条件时使用它。整数文字1是一个数字。每当您计算某些东西时,请使用它。不要将整数用于boolean值,反之亦然。它们不一样。考虑一个变量intisEnabled。当然,我可以猜测0和1可能是该变量的唯一预期值。但在语言方面,没有什么能阻止我分配4247891。但是,使用boolean值会将有效值限制为true和false。这没有任何猜测的余地。(C++int和bool在某种程度上是可转换的,但通常不被接受)

c++ - 哪个值更好用? boolean 真还是整数 1?

这有意义吗? 最佳答案 booleantrue是一个boolean值。当你想表达满足某个二元条件时使用它。整数文字1是一个数字。每当您计算某些东西时,请使用它。不要将整数用于boolean值,反之亦然。它们不一样。考虑一个变量intisEnabled。当然,我可以猜测0和1可能是该变量的唯一预期值。但在语言方面,没有什么能阻止我分配4247891。但是,使用boolean值会将有效值限制为true和false。这没有任何猜测的余地。(C++int和bool在某种程度上是可转换的,但通常不被接受)

c++ - 运算符 |= 用于 C++ 中的 boolean 值

我偶然发现了以下C++结构:boolresult=false;for(inti=0;i我认为这个|=是OR运算符的快捷方式,并且result最终将等于true如果至少这些对TryAndDoSomething的调用之一返回了true。但现在我想知道是否多个调用实际上可以返回true。事实上,如果我们将操作扩展为:result=result||TryAndDoSomething(i);那么只有当return评估为false时才会调用该方法,也就是说,如果在返回true之前没有其他调用。因此,在一个调用返回true后,将不再进行其他调用。这是正确的解释吗? 最佳答