相关疑难解决方法(0)

为什么/何时使用(!! p)而不是(p!= NULL)

在下面的代码中,使用(!!p)代替的有(p != NULL)什么好处?

AClass *p = getInstanceOfAClass();
if( !!p )
  // do something
else 
  // do something without having valid pointer
Run Code Online (Sandbox Code Playgroud)

c++ null pointers boolean

7
推荐指数
3
解决办法
2563
查看次数

宏定义中双重否定的目的是什么,如(!!(expr))?

可能重复:
C++代码中的双重否定.

我正在阅读代码库,并找到这样的东西:

#define uassert(msgid, msg, expr) (void)((!!(expr))||(uasserted(msgid, msg), 0))
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚为什么(!!(expr))而不是单个(expr).无论如何,双重否定意味着积极,不是吗?我错过了什么吗?

c c++ compiler-construction macros gcc

7
推荐指数
1
解决办法
2656
查看次数

C++"var foo = !! :: bar()"语法?

寻找关于如何使用HWND窗口进行全屏模式的一些解释,我发现这个响应Win32:全屏和隐藏任务栏

铬响应代码有这一行:

saved_window_info_.maximized = !!::IsZoomed(hwnd_);
Run Code Online (Sandbox Code Playgroud)

来自此文件https://src.chromium.org/viewvc/chrome/trunk/src/ui/views/win/fullscreen_handler.cc?revision=HEAD&view=markup on the line 56

我读:

var bar equal not not of mother method
Run Code Online (Sandbox Code Playgroud)

它是否正确 ?

这个"!! :: IsZoomed()"是什么意思?

为什么不呢

saved_window_info_.maximized = CWnd::IsZoomed(hwnd_);
Run Code Online (Sandbox Code Playgroud)

c++ syntax cwnd

7
推荐指数
1
解决办法
267
查看次数

为什么写`!!x`,什么时候写`x`?

我经常看到有经验的程序员写!!x,即使预期的表达式是布尔值(即零或非零)而不是整数。

例如,来自 boost 的一行:

BOOST_ASSERT(!!p); // where `p` is a pointer
Run Code Online (Sandbox Code Playgroud)

什么!!p时候才p做呢?

我对布尔参数的理解是将表达式转换为整数类型的值,并将该值与零、显式或隐式(使用if或其三元运算符等效)进行比较。

因此,如果我对 Boolean 的理解是正确的,那么任何需要 Boolean 并且只期望0或被1错误实现的东西。

澄清一下:很明显,!转换为bool; 问题是明确询问为什么

c++ boost

7
推荐指数
1
解决办法
241
查看次数

在非布尔变量上使用的double not(!!)是什么?

可能重复:
C++代码中的双重否定.

我正在使用生产代码,我已经在这样的语句中运行了几次:

Class.func(!!notABool);
Run Code Online (Sandbox Code Playgroud)

前几次我把它视为一个programmer quirk(也许是为了强调它是一个条件语句,而不是一个数字传递给func?)但是我遇到了几个使用上面的语句,现在我想知道它是否真的使差异与否.在大多数情况下notABool是一个数字(int,float,double ......我已经看过所有3)我最初的猜测是它类似于输入:

Class.func((bool)notABool);
Run Code Online (Sandbox Code Playgroud)

但我不完全确定?

c++ boolean

5
推荐指数
2
解决办法
8834
查看次数

惯用法检查非零

当我想检查一个值是否0在C中时,它是如何惯用的?

  • if (!num)
  • if (num == 0)

c if-statement idioms

5
推荐指数
2
解决办法
2202
查看次数

在评估`if()`语句中的条件时,旧版本的C++是否使用类的`int`运算符?

bool在评估if()语句中的条件时,C++的现代版本尝试使用类的运算符.其他铸造操作员,例如int在没有bool操作员时使用.这在下面说明.

#include <iostream>
using namespace std;

class TwoInts {
  public:
    int a,b;
    operator bool() { cout << "TwoInts to bool" << endl; return 0;}
    operator int()  { cout << "TwoInts to int"  << endl; return 0;}
};

class SixInts {
  public:
    int a[6];
    operator int()  { cout << "SixInts to int" << endl; return 0;}
};

int main(void) {
  TwoInts T;
  SixInts S;
  if (T) cout << "xxx" << endl;
  if (S) cout …
Run Code Online (Sandbox Code Playgroud)

c++

5
推荐指数
1
解决办法
232
查看次数

双布尔否定运算符

我从Microsoft的GSL实现(C++指南支持库)中看到了这段代码:

#if defined(__clang__) || defined(__GNUC__)
#define GSL_LIKELY(x) __builtin_expect(!!(x), 1)
#define GSL_UNLIKELY(x) __builtin_expect(!!(x), 0)
#else
#define GSL_LIKELY(x) (!!(x))
#define GSL_UNLIKELY(x) (!!(x))
#endif
Run Code Online (Sandbox Code Playgroud)

我读到了__builtin_expect(这里这里),但我仍然不清楚双boolean否定运算符的目的是什么(!!(x)).为什么用它?

有问题的文件就是这个.

c c++ macros negation

5
推荐指数
1
解决办法
193
查看次数

什么!! some_object做什么?

可能重复:
什么!! 红宝石意味着什么?

这个功能在做什么?

def current_product?
   !!current_product
end
Run Code Online (Sandbox Code Playgroud)

这不是双重否定吗?

ruby ruby-on-rails

1
推荐指数
1
解决办法
728
查看次数

什么意思!! 在C - 为什么需要它?

可能重复:
C++代码中的双重否定

在阅读我读到的一个代码时:

flush = ! !(flags & GST_SEEK_FLAG_FLUSH);
Run Code Online (Sandbox Code Playgroud)

我没有得到!!这里的意思.这句话怎么办?

编辑:

我得到了它的双重否定.将非bool数据转换为bool的技巧

但那有什么需要呢?这里冲洗是bool然后如果你将任何非零项目分配给bool它会将1和零项目视为0,所以这样做有什么好处?

c equation not-operator

1
推荐指数
1
解决办法
585
查看次数

定义例外,它是如何工作的?

我应该如何理解这样的代码?特别是我想知道在'\'后的第二部分发生了什么.任何人都可以解释一下它是如何工作的?

#define except(expression, message) (void) \
(!!(expression) || (throw std::runtime_error(message), false))
Run Code Online (Sandbox Code Playgroud)

c++ exception c-preprocessor

1
推荐指数
1
解决办法
61
查看次数

有什么区别!! 没别的了?

有时,我看到以下代码:

if ( !!on_debugging ) 
Run Code Online (Sandbox Code Playgroud)

这是一样的

if ( on_debugging )
Run Code Online (Sandbox Code Playgroud)

我不明白为什么要使用这两个.有什么区别吗?

c c++ java

0
推荐指数
1
解决办法
181
查看次数