GVKun编程网logo

在分配给null之前检查变量null是否?

16

在本文中,您将会了解到关于在分配给null之前检查变量null是否?的新资讯,并给出一些关于angularjs是否作为$scope.null处理null?、c–jsoncpp如何检查标签是否为null

在本文中,您将会了解到关于在分配给null之前检查变量null是否?的新资讯,并给出一些关于angularjs是否作为$scope.null处理null?、c – jsoncpp如何检查标签是否为null .isNull()throw assertion、c – 检查是否将std :: function分配给nullptr、c# – 在条件的两边检查null是否有所不同?的实用技巧。

本文目录一览:

在分配给null之前检查变量null是否?

在分配给null之前检查变量null是否?

与空检查相比,变量分配是否昂贵?例如,在将foo分配为null之前是否值得检查其是否为null?

if (foo != null) {     foo = null;}

还是这无所顾忌?

答案1

小编典典

这是一个微微优化(可能还是由编译器处理)。不用担心 通过专注于程序的实际算法,您将获得更大的回报。

我们应该忘记效率低下的问题,例如大约97%的时间:过早的优化是万恶之源。-唐纳德​​·努斯

angularjs是否作为$scope.null处理null?

angularjs是否作为$scope.null处理null?

问题的例子

<div ng-show="bar !== null">hello</div>

这是否在范围内评估为

$scope.bar !== null

还是这样?

$scope.bar !== $scope.null

请注意,在最后一种情况下,$scope.null将是未定义的,并且示例似乎正常工作.

奖金:

如果bar = null则会发生这种情况

// this does not work (shows hello)
<div ng-show="bar !== null">hello</div>

没有给出相同的结果

// this works ok (does not show hello)
<div ng-show="bar != null">hello</div>

为什么会这样?

解决方法

不,Angular recognizes表达式中有一些JS原语,而null就是其中之一.

c – jsoncpp如何检查标签是否为null .isNull()throw assertion

c – jsoncpp如何检查标签是否为null .isNull()throw assertion

我使用jsoncpp,它的伟大,但是当我需要检查json结构是否包含标签
当我这样做:
UserRoot0["error"].isNull()

它抛出我从json_value.cpp行1025断言

JSON_ASSERT( type_ == nullValue  ||  type_ == objectValue );

我想检查一下这个类型的响应是否得到:

{    "error" : {        "message" : "Error validating application.","type" : "OAuthException","code" : 190    }}

解决方法

[]操作符仅对Object或null类型的JsonValue对象有效.所有其他人(Int,Bool,Array等)都会断言.

如果您的UserRoot0对象是一个Array或其他非Object类型,您还有一些工作要做(比如迭代到子节点)来查找可能包含错误也可能不包含错误的目标节点.打印UserRoot0.toStyledString()以查看您的JSON是什么样子,并确保它看起来像一个JSON对象(参见json.org有一个很好的概述是什么).

json_value.cpp源文件(其中定义了JSON_ASSERT)的顶部的“Todo”注释意味着开发人员可能正在计划更强大的错误处理,而不是将来版本中的这些断言,但同时您可以检查自己,喜欢这个:

if(UserRoot0.isObject() && UserRoot0.isMember("error"))    // Process error nodeelse    // This node isn't an Object node or doesn't contain the "error" key

isMember()检查也将为非Object节点断言,因此如果UserRoot0不能保证为对象,请确保在检查isMember()之前检查isObject().

c – 检查是否将std :: function分配给nullptr

c – 检查是否将std :: function分配给nullptr

我想知道是否有任何方法来检查您分配到std :: function的函数指针是否为nullptr.我期待着!-operator这样做,但它似乎只在函数被赋值为nullptr_t类型时才起作用.
typedef int (* initModuleProc)(int);

initModuleProc pProc = nullptr;
std::function<int (int)> m_pInit;

m_pInit = pProc;
std::cout << !pProc << std::endl;   // True
std::cout << !m_pInit << std::endl; // False,even though it's clearly assigned a nullptr
m_pInit = nullptr;
std::cout << !m_pInit << std::endl; // True

我写了这个辅助函数来解决这个问题.

template<typename T>
void AssignToFunction(std::function<T> &func,T* value)
{
    if (value == nullptr)
    {
        func = nullptr;
    }
    else
    {
        func = value;
    }
}

解决方法

这是你的std :: function实现中的一个错误(也很明显是我的),标准说运算符!如果对象是用null函数指针构造的,则返回true,参见[func.wrap.func]段落8.赋值运算符应该等同于用参数构造std :: function并交换它,所以运算符!在这种情况下也应该返回true.

c# – 在条件的两边检查null是否有所不同?

c# – 在条件的两边检查null是否有所不同?

参见英文答案 > Difference between null == x and x == null?                                     5个
我见过两者

if(something == null)

if(null == something)

这个空检查发生的顺序是否有所不同?我没有看到功能上的差异,但很想知道它背后是否有推理.

解决方法

这在C#中是合法的,通俗地称为 Yoda Condition.C/C++世界中的许多人都喜欢这样,因为它在编译时防止意外地替换== with =.但是,由于编译器会将它(single =)标记为该实例中的错误(只要它不是布尔值),它在C#中已经失宠了.

关于在分配给null之前检查变量null是否?的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于angularjs是否作为$scope.null处理null?、c – jsoncpp如何检查标签是否为null .isNull()throw assertion、c – 检查是否将std :: function分配给nullptr、c# – 在条件的两边检查null是否有所不同?等相关内容,可以在本站寻找。

本文标签: