相关疑难解决方法(0)

C++中的POD类型是什么?

我有几次遇到这个术语POD型.这是什么意思?

c++ types c++-faq

919
推荐指数
8
解决办法
29万
查看次数

什么是nullptr?

我们现在拥有许多新功能的C++ 11.一个有趣且令人困惑的(至少对我来说)是新的nullptr.

嗯,不再需要令人讨厌的宏了NULL.

int* x = nullptr;
myclass* obj = nullptr;
Run Code Online (Sandbox Code Playgroud)

尽管如此,我还没有得到如何nullptr运作.例如,维基百科的文章说:

C++ 11通过引入一个new 关键字作为一个区分空指针常量来解决这个问题:nullptr.它的类型为nullptr_t,它是可隐式转换的,可与任何指针类型或指向成员类型的类型相媲美.除了bool之外,它不可隐式转换或与整数类型相比.

它是一个关键字和一个类型的实例?

另外,你有另一个例子(在维基百科旁边)哪里nullptr优于好老0

c++ pointers nullptr c++11

546
推荐指数
8
解决办法
31万
查看次数

理解指针有什么障碍,克服它们可以做些什么?

对于C或C++中的许多新的,甚至是老的大学生来说,为什么指针会成为混乱的主要因素?是否有任何工具或思维过程可以帮助您理解指针在变量,函数和更高级别的工作方式?

有什么好的做法可以让人达到"啊哈,我明白了"的水平,而不会让他们陷入整体概念的困境?基本上,钻取方案.

c c++ pointers

443
推荐指数
16
解决办法
7万
查看次数

何时使用引用与指针

我理解指针与引用的语法和一般语义,但是我应该如何决定何时在API中使用引用或指针?或多或少?

当然,有些情况需要一个或另一个(operator++需要一个引用参数),但总的来说,我发现我更喜欢使用指针(和const指针),因为语法清楚地表明变量是破坏性地传递的.

例如,在以下代码中:

void add_one(int& n) { n += 1; }
void add_one(int* const n) { *n += 1; }
int main() {
  int a = 0;
  add_one(a); // Not clear that a may be modified
  add_one(&a); // 'a' is clearly being passed destructively
}
Run Code Online (Sandbox Code Playgroud)

使用指针,它总是(更加)明显地发生了什么,所以对于API等,清晰度是一个大问题,指针不是比引用更合适?这是否意味着只应在必要时使用引用(例如operator++)?是否有任何性能问题?

编辑(已完成):

除了允许NULL值和处理原始数组之外,似乎选择归结为个人偏好.我已经接受了下面引用Google的C++样式指南的答案,因为它们提出了"引用可能令人困惑,因为它们具有值语法但指针语义"的观点.

由于清理不应该为NULL的指针参数所需的额外工作(例如,add_one(0)将调用指针版本并在运行时中断),从可维护性的角度来看,使用必须存在对象的引用是有意义的,尽管这是一种耻辱失去句法的清晰度.

c++ pointers reference

366
推荐指数
11
解决办法
18万
查看次数

如何将对象传递给C++中的函数?

我是C++编程的新手,但我有Java经验.我需要有关如何将对象传递给C++中的函数的指导.

我是否需要传递指针,引用或非指针和非引用值?我记得在Java中没有这样的问题,因为我们只传递了保存对象引用的变量.

如果您还可以解释在哪里使用这些选项,那将会很棒.

c++ pointers c++-faq pass-by-reference pass-by-value

245
推荐指数
4
解决办法
13万
查看次数

错误:此范围内未声明"NULL"

我在gcc 4.3上编译C++时收到此消息

error: ‘NULL’ was not declared in this scope
Run Code Online (Sandbox Code Playgroud)

它出现并消失,我不知道为什么.为什么?

谢谢.

c++ null gcc pointers

116
推荐指数
4
解决办法
15万
查看次数

指针和参考参数之间的区别?

这些都是一样的:

int foo(bar* p) {
  return p->someInt();
}
Run Code Online (Sandbox Code Playgroud)

int foo(bar& r) {
  return r.someInt();
}
Run Code Online (Sandbox Code Playgroud)

忽略空指针潜力.这两个函数在功能上是否相同,无论它们someInt()是虚拟的还是传递给它们bar的子类bar

这会切片吗:

bar& ref = *ptr_to_bar;
Run Code Online (Sandbox Code Playgroud)

c++ pointers reference object-slicing

64
推荐指数
5
解决办法
4万
查看次数

在C++中用&和*声明的函数参数之间的区别

我输入以下示例:

#include <iostream>
double f(double* x, double* y)
{
    std::cout << "val x: " << *x << "\n";
    std::cout << "val y: " << *y << "\n";
    return *x * *y;
}
double f2(double &x, double &y)
{
    std::cout << "val x: " << x << "\n";
    std::cout << "val y: " << y << "\n";
    return x * y;
}
int main()
{
    double a, b;
    a = 2;
    b = 3; 
    std::cout << f(&a, &b) << "\n";
    std::cout …
Run Code Online (Sandbox Code Playgroud)

c++ pointers function pass-by-reference

55
推荐指数
4
解决办法
5万
查看次数

通过指针传递并通过引用传递

可能重复:
C++中指针变量和引用变量之间有什么区别?
在C++中通过引用传递指针是否有好处?

在这两种情况下,我都取得了成果.那么什么时候优先于另一个呢?我们使用其中一个的原因是什么?

#include <iostream>
using namespace std;
void swap(int* x, int* y)
{
    int z = *x;
    *x=*y;
    *y=z;
}
void swap(int& x, int& y)
{
    int z = x;
    x=y;
    y=z;
}

int main()
{
    int a = 45;
    int b = 35;
    cout<<"Before Swap\n";
    cout<<"a="<<a<<" b="<<b<<"\n";

    swap(&a,&b);
    cout<<"After Swap with pass by pointer\n";
    cout<<"a="<<a<<" b="<<b<<"\n";

    swap(a,b);
    cout<<"After Swap with pass by reference\n";
    cout<<"a="<<a<<" b="<<b<<"\n";
}
Run Code Online (Sandbox Code Playgroud)

产量

Before Swap
a=45 b=35
After Swap with pass by pointer …
Run Code Online (Sandbox Code Playgroud)

c++ pointers reference parameter-passing

42
推荐指数
2
解决办法
10万
查看次数

func(int&param)和func(int*param)之间有什么区别?

在下面的代码,都amp_swap()star_swap()似乎是在做同样的事情.那么为什么有人喜欢使用一个而不是另一个呢?哪一个是首选符号,为什么?或者只是品味问题?

#include <iostream>

using namespace std;

void amp_swap(int &x, int &y)
{
    int temp = x;
    x = y;
    y = temp;
}

void star_swap(int *x, int *y)
{
    int temp = *x;
    *x = *y;
    *y = temp;
}

int main()
{
    int a = 10, b = 20;
    cout << "Using amp_swap(): " << endl;
    amp_swap(a, b);
    cout << "a = " << a << ", b = " << b << endl;
    cout …
Run Code Online (Sandbox Code Playgroud)

c++ pointers reference

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