标签: nullptr

&*表示原始指针,迭代器和... std :: nullptr_t

我有一个模板函数启用(通过std :: enable_if)它的参数是一个原始指针,或者有一个std :: iterator类或者是一个std :: nullptr_t.在该函数中,原始指针(数据成员)设置为等于参数,如下所示:

template<class T> void myFunction(T it) 
{
    _ptr = &*it;
}
Run Code Online (Sandbox Code Playgroud)

&*适用于指针和迭代器......但它对于std :: nullptr_t失败了.是否有任何解决方案可以避免编写2个不同的功能?

谢谢.

c++ pointers reference nullptr

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

为什么三元运算符与if-else在这里不一样?

我正在使用TR1 std::function来实现一个简单的回调机制.如果我不想nullptr回调,我会注册为回调处理程序.这编译并正常工作:

void Foo::MessageHandlingEnabled( bool enable ){
    if( enable )
        m_Bar.RegisterMessageHandler( std::bind(&Foo::BarMessageHandler, this, std::placeholders::_1) );
    else
        m_Bar.RegisterMessageHandler( nullptr );
}
Run Code Online (Sandbox Code Playgroud)

如果我使用三元运算符重写它...

void Foo::MessageHandlingEnabled( bool enable ){
        m_Bar.RegisterMessageHandler( enable?
                                      std::bind(&Foo::BarMessageHandler, this, std::placeholders::_1) :
                                      nullptr );   

 }
Run Code Online (Sandbox Code Playgroud)

... VC++的编译器说:

错误C2446:':':没有从'nullptr'转换为'std :: tr1 :: _ Bind <_Result_type,_Ret,_BindN>'1> 1>
[1> _Result_type = void,1> _Ret = void,1>
_BindN = std :: tr1 :: _ Bind2,Foo*,std :: tr1 :: _ Ph <1 >> 1>] 1>没有构造函数可以采用源类型,或者构造函数重载解析是模糊的

这是编译器的限制,还是我做了一些愚蠢的事情?我知道在这种特殊情况下,使用三元运算符可能无法获得任何好处,但我只是好奇.

c++ visual-studio-2010 nullptr c++11 std-function

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

空参数检查C++

我有一个函数可以解决4个运动方程中的一个.参数是浮点数,有没有办法区分NULL参数和值为0的参数.我已经阅读了主题,似乎NULL和0是相同的.我想区分0和"虚无"形式的原因是因为0值赋值,而"虚无"表示我们不知道该值是什么.

float doSomething(float& foo, float& bar, float& goo, float& baz){
    if(foo == (insert_null_value_here)){
        return (foo_after_we_did_some_equation);
    }
}
Run Code Online (Sandbox Code Playgroud)

正如我已经讨论过的,"null"值不能为NULL或0.如果参数都是指向浮点数的指针,那么如果我检查"nullptrs",这会工作吗?(不是我的主要问题)即使前一个问题是肯定的,我可以将什么值用于非指针/引用类型?(重新主要问题陈述)

c++ parameters null kinematics nullptr

0
推荐指数
2
解决办法
388
查看次数

指针声明传染媒介

看看我教授给我的一些代码,我不明白发生了什么.我是编程新手,完全迷失了.

vector <_Account*>*myvector = nullptr;
Run Code Online (Sandbox Code Playgroud)

所以我知道他创建了一个向量,我知道一个现有的类,Account所以这是一个vector指向Account对象的指针吗?我不知道第二个星号是做什么的?

c++ pointers vector nullptr

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

如何#include在C++/CLI项目中使用nullptr的第三方本机C++标头

我正在尝试编写一个托管C++(又名C++/CLI)库,该库链接到第三方本机C++库.第三方库的头文件包含使用该nullptr关键字的构造函数定义.我的托管项目无法编译,因为托管编译器定义nullptr为托管空引用,而第三方使用它来表示本机/未托管空指针.如何在不修改第三方库的头文件的情况下解决此问题?

有关nullptrvs的参考__nullptr,请参阅:https://msdn.microsoft.com/en-us/library/4ex65770.aspx

c++ c++-cli nullptr

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

为什么使用`nullptr`会导致性能下降[在LeetCode上]?

作为LeetCode的一部分,我编写了一个简单的递归函数来遍历二叉树并输出所有可能的路径.(没有必要考虑这个来回答我的问题.我只是提供示例代码以演示一个具体的例子.)

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<string> binaryTreePaths(TreeNode* root) {
        vector<string> paths;
        if( root != nullptr ) {
            string str;
            binaryTreePathsHelper(root, paths, str);
        }
        return paths;
    }

    void binaryTreePathsHelper(TreeNode* node, vector<string>& paths, string str) {

        str += std::to_string(node->val);

        if( node->left  == nullptr &&
            node->right == nullptr ) {
            paths.push_back(str); …
Run Code Online (Sandbox Code Playgroud)

c++ performance nullptr

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

std :: string :: c_str()能否返回nullptr?

我在这里和其他资源上阅读了几个主题,并没有找到确切的答案.答案似乎永远不会.请确认.


停止.永远不会.如前所述,为什么可以将nullptr分配给std :: string?:

std::string str {nullptr};  // Undefined behavior
Run Code Online (Sandbox Code Playgroud)

所以如果这不会抛出(取决于实现),c_str()可以返回(char_t*)nullptr.

我相信,有没有其他方式获得nullptrc_str().但必须要求StackOverflow社区确定.谢谢你的关注.

c++ string nullptr c++11

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

c ++:成员函数中的“ this == nullptr”是否安全?

为了计算二叉树height(left)+height(right)+1的高度,将不存在的节点的高度定义为-1。因此,如果left或right为null,则该公式将有效而无需明确指定这些情况。

我在C ++中实现了这个想法,并确保如果,成员函数将不会访问成员变量this == nullptr。我的实现成功并且有效(至少在我的Linux机器上)。

我想找出这种方法可能带来的实际弊端,以及该标准是否规定了任何其他方面。所以,这就是我的问题。

#include <algorithm>
#include <iostream>

struct Node {
    // default values of the child nodes are NULL
    Node *left = nullptr;
    Node *right = nullptr;

    // store some value
    int v;

    int get_height() const __attribute__ ((optimize(0))) {
        if (this == nullptr)
            return -1;
        return std::max(left->get_height(), right->get_height()) + 1;
    }
};

int main() {
    Node node1, node2, node3, node4;
    node2.left = &node1;
    node2.right = &node3;
    node3.right = &node4;
    std::cout << node2.get_height() << …
Run Code Online (Sandbox Code Playgroud)

c++ this nullptr

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

我们可以使用 C++ 中限定为常量且值为 0 的变量来初始化指针吗?

根据 C++ Primer 一书,我们可以将限定为 const 且值为 0 的变量分配给指针。这是书中的相关内容。

可以分配文字 0 或在编译时已知其值为 0 的常量:

然后提供以下代码片段。

int ival;
int zero = 0;
const int c_ival = 0;
int *pi = ival;        // error
pi = zero;             // error
pi = c_ival            // ok: c_ival is a const with compile-time value of 0
Run Code Online (Sandbox Code Playgroud)

但是,当我运行类似的代码时,会引发错误。

int main()
{
    const int c_ival = 0;
    int *pi = c_ival;            
}
Run Code Online (Sandbox Code Playgroud)

错误:从“int”到“int*”的无效转换 [-fpermissive]

我究竟做错了什么?

c++ pointers null-pointer nullptr

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

`cout&lt;&lt;nullptr` 给出错误,尽管 `nullptr` 的类型来自 C++17

代码 1

#include <iostream>

int main()
{
    std::cout << nullptr;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出

Error: Use of overloaded operator '<<' is ambiguous (with operand types 'std::ostream' (aka 'basic_ostream<char>') and 'nullptr_t')
Run Code Online (Sandbox Code Playgroud)

甚至有特定类型nullptr显示错误的原因。但

代码 2

#include <iostream>

int main()
{
    std::cout << (void*)nullptr;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出

0
Run Code Online (Sandbox Code Playgroud)

工作正常。为什么void*即使它不是类型也能工作?

c++ void-pointers nullptr c++17

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