首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从SoundCard直接访问GPU和C++芯片的功能?

如何从SoundCard直接访问GPU和C++芯片的功能?
EN

Stack Overflow用户
提问于 2013-08-26 11:17:04
回答 2查看 315关注 0票数 0

我是一个学习C++并发程序的学生,我想知道如何通过我的C++ program.Is访问图形卡芯片和声卡芯片的功能--还有另一种方式,不用使用OpenGL、OpenAL etc.Can等外部库就可以连接各自的驱动程序和应用程序。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-26 11:30:39

代码语言:javascript
复制
const int * const function_name(const int * point) const;
//(1)       (2)                 (3)                (4)

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

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

第三,防止函数修改数据。这是好的(在适当的时候),因为同样的原因与第一个。

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

代码语言:javascript
复制
const int * const Functiontwo(const int * const &) const;
//                                        (5)

这里唯一的新东西是通过const引用传递指针。这样做是没有意义的;传递值会提供相同的语义,而且不那么冗长,而且可能更有效率。通过const引用传递比按值传递较大或其他昂贵的复制类型的效率更高。

一个细微的变化就是传递一个const值:

代码语言:javascript
复制
const int * const Functiontwo(const int * const) const;
//                                        (6)

调用方对此不感兴趣(实际上,函数可以在不改变含义的情况下声明它);因此,将其放在声明中,仅仅放在定义上是没有意义的。这意味着指针不能在函数中更改。这可能很好(正如声明局部变量const一样),因为它可以使函数实现更容易遵循。

票数 11
EN

Stack Overflow用户

发布于 2013-08-26 11:42:39

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

代码语言:javascript
复制
struct foo
{
    int bar() const; // does not modify the instance of foo
    int & bar(); // might modify the instance of foo
};

在您的示例中,函数返回

代码语言:javascript
复制
int const * const

第一个const的意思是,您所指向的int不能更改;您告诉您的用户,他可以读取该值,但不能修改它。这也与const-correctness相关:

代码语言:javascript
复制
int const * foo() const; // can be used from const functions
int * foo(); // cannot be used from const function

第二个const表示指针本身是const,这意味着:

代码语言:javascript
复制
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

将指针本身const作为函数的返回值几乎没有什么用处。

对于引用,C++03的一个快速指南是,如果要修改对象,需要通过引用传递,并且希望修改保持不变;如果要修改对象,但不希望修改(复制)或(异常!),则传递值。如果要传递的值是POD类型;如果不需要修改非POD类型,则通过常量引用传递,从而节省复制成本:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18442839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档