我是一个学习C++并发程序的学生,我想知道如何通过我的C++ program.Is访问图形卡芯片和声卡芯片的功能--还有另一种方式,不用使用OpenGL、OpenAL etc.Can等外部库就可以连接各自的驱动程序和应用程序。谢谢。
发布于 2013-08-26 11:30:39
const int * const function_name(const int * point) const;
//(1) (2) (3) (4)第一个方法防止返回的指针被用于修改函数正在访问的任何数据。这很好(除非您想修改它),因为它可以防止对共享数据的意外修改。
第二种方法防止调用方修改返回的指针。这在返回内置类型(如指针)时没有任何效果,在返回类类型时也可能是不好的,因为它抑制了移动语义。
第三,防止函数修改数据。这是好的(在适当的时候),因为同样的原因与第一个。
第四种方法防止函数修改对象的(不可变)状态。这是很好的(在适当的时候),因为它允许在const对象上调用函数,并且可以更容易地跟踪对象可能更改的时间。
const int * const Functiontwo(const int * const &) const;
// (5)这里唯一的新东西是通过const引用传递指针。这样做是没有意义的;传递值会提供相同的语义,而且不那么冗长,而且可能更有效率。通过const引用传递比按值传递较大或其他昂贵的复制类型的效率更高。
一个细微的变化就是传递一个const值:
const int * const Functiontwo(const int * const) const;
// (6)调用方对此不感兴趣(实际上,函数可以在不改变含义的情况下声明它);因此,将其放在声明中,仅仅放在定义上是没有意义的。这意味着指针不能在函数中更改。这可能很好(正如声明局部变量const一样),因为它可以使函数实现更容易遵循。
发布于 2013-08-26 11:42:39
成员函数之后的const意味着该函数不修改父对象的状态:
struct foo
{
int bar() const; // does not modify the instance of foo
int & bar(); // might modify the instance of foo
};在您的示例中,函数返回
int const * const第一个const的意思是,您所指向的int不能更改;您告诉您的用户,他可以读取该值,但不能修改它。这也与const-correctness相关:
int const * foo() const; // can be used from const functions
int * foo(); // cannot be used from const function第二个const表示指针本身是const,这意味着:
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类型,则通过常量引用传递,从而节省复制成本:
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 madehttps://stackoverflow.com/questions/18442839
复制相似问题