如何从C++直接访问GPU和声卡芯片的功能? 我是一个学生,学习C++并发编程。我想知道如何通过我的C++程序访问图形卡芯片和声卡芯片。在没有使用外部库的情况下,有没有其他的方法连接OpenGL、OpenAL等。 多谢各位 const int * const function_name(const int * point) const; //(1) (2) (3) (4)

如何从C++直接访问GPU和声卡芯片的功能? 我是一个学生,学习C++并发编程。我想知道如何通过我的C++程序访问图形卡芯片和声卡芯片。在没有使用外部库的情况下,有没有其他的方法连接OpenGL、OpenAL等。 多谢各位 const int * const function_name(const int * point) const; //(1) (2) (3) (4),c++,c++11,C++,C++11,第一种方法防止返回的指针用于修改函数正在访问的任何数据。这很好,除非您想修改它,因为它可以防止对共享数据的意外修改 第二种方法防止调用方修改返回的指针。这在返回内置类型(如指针)时没有效果,在返回类类型时可能不好,因为它禁止移动语义 第三种方法防止函数修改数据。出于与第一个相同的原因,这在适当的时候是好的 第四种方法防止函数修改对象的不可变状态。这在适当的时候是好的,因为它允许在const对象上调用函数,并且更容易跟踪对象何时可能发生变化 const int * const Functiontw

第一种方法防止返回的指针用于修改函数正在访问的任何数据。这很好,除非您想修改它,因为它可以防止对共享数据的意外修改

第二种方法防止调用方修改返回的指针。这在返回内置类型(如指针)时没有效果,在返回类类型时可能不好,因为它禁止移动语义

第三种方法防止函数修改数据。出于与第一个相同的原因,这在适当的时候是好的

第四种方法防止函数修改对象的不可变状态。这在适当的时候是好的,因为它允许在const对象上调用函数,并且更容易跟踪对象何时可能发生变化

const int * const Functiontwo(const int * const &) const;
//                                        (5)
这里唯一的新功能是通过常量引用传递指针。这样做没有意义;通过值传递提供了相同的语义,而且不太冗长,可能更高效。对于较大或复制成本较高的类型,通过常量引用传递可能比通过值传递更有效

一个微小的变化是传递常量值:

这对调用方来说并不重要,可以在不改变含义的情况下声明函数,也可以声明它;因此,把它放在声明上没有意义,只是放在定义上。这意味着指针不能在函数中更改。这与声明局部变量const一样好,因为它可以使函数实现更容易执行。

成员函数后的const意味着函数不会修改父对象的状态:

struct foo
{
    int bar() const; // does not modify the instance of foo
    int & bar(); // might modify the instance of foo
};
在您的示例中,函数返回

int const * const
第一个常量意味着你所指向的int不能改变;您告诉用户他可以读取值,但不能修改它。这也与常量的正确性有关:

int const * foo() const; // can be used from const functions
int * foo(); // cannot be used from const function
第二个常量表示指针本身是常量,这意味着:

int * ptr = &a;
*ptr = 42; // valid
ptr = &b; // valid

int const * ptr = &a;
*ptr = 42; // INVALID
ptr = &b; // valid

int * ptr const = &a;
*ptr = 42; // valid
ptr = &b; // INVALID

int const * ptr const = &a;
*ptr = 42; // INVALID
ptr = &b; // INVALID
将指针本身设置为常量作为函数的返回值几乎没有用处

对于引用,C++03的快速指南是,如果要修改对象并希望修改保持不变,则需要通过引用传递;如果要修改对象但不希望修改粘贴副本,请按值传递,否则会出现异常!如果要传递的值是POD类型;如果不需要修改非POD类型,则通过常量引用传递,从而节省复制成本:

void foo(int & a); // changes to a are applied to a itself, no copy made
void foo(int a); // changes to a are applied to a copy of a, copy made
void foo(std::string const & a); // no changes allowed, no copy made

我浏览了这个网站:但无法掌握我想要的确切想法。需要更好的解释如何在每个地方适当地放置这些const关键字,以及它如何影响程序效率。我有一个简单的规则:当有一些东西我不需要更改时,然后我使用const。也许你应该说出你认为这个词的意思,然后说出上面每个用法的意思。毕竟,你只是完成了一个教程。你从中学到了什么吗?请看一看:它会让你对const有一个很好的了解usage@JoachimPileborg:我的规则是使一切都保持常量,除非我想用它做的任何事情都需要其他东西。非常感谢//bro.wrt最后一个例子:因为这实际上是一个函数声明,参数的顶级常量没有任何意义。函数定义可以根据需要保留或添加顶级常量。@ArneMertz:确实如此;我更新后更明确地说,在声明中放入顶级常量没有任何意义。@gx:很好,我没有正确阅读我粘贴的内容。@All我们如何在没有标识符的函数中使用const int*const&呢?我想应该是const int*const&x什么的?
void foo(int & a); // changes to a are applied to a itself, no copy made
void foo(int a); // changes to a are applied to a copy of a, copy made
void foo(std::string const & a); // no changes allowed, no copy made