C++ 属性

C++ 属性

在现代C++语言中,我们可以使用属性来增加代码的效率,减少程序员编写大量代码所需的时间。C++中的属性就像是与代码一起编写的一些额外条件,编译器必须遵循该特定条件。这些属性可以是附加到变量或函数的任何条件或信息。尽管编译器在优化方面相当有效,但与人类相比,在几个方面仍然存在不足,并推荐使用效率低下的通用代码。主要原因是对人所面临的“问题”缺乏理解。

C++标准已经包含了特定的新属性,可以使编译器在一定程度上解决这个问题,而不是实际的代码语句。

语法:

[[attribute_list]]

以下是C++代码中使用的属性:

1. noreturn属性

该属性用于任何函数声明之前,表示该函数永远不会返回任何值。虽然我们有一个void关键字,它可以实现相同的功能,但关键区别在于void函数不返回任何值,但控制器会返回到函数调用的地方,而noreturn属性不会返回到函数被调用的地方。

C++示例:

#include 
#include 
using namespace std;
 void fxn1()
{
cout<<"fxn1 is called"<

输出:

C++ 属性

解释:

在上面的例子中,fxn1具有void返回类型,因此它不返回任何值,但在调用fxn1之后,fxn2将被调用,因为控制器将达到调用fxn1的点。

C++示例2:

#include 
#include 
using namespace std;
[[noreturn]] void fxn1()
{
cout<<"fxn1 is called"<

输出:

C++ 属性

说明:

在上述代码中,如果我们在fxn1之前使用noreturn属性,则编译器会显示有关该属性的警告。

2. maybe_unused属性

当我们在代码中声明变量但不使用时,可以使用此属性来忽略编译器的警告。

C++示例:

#include 
#include 
using namespace std;
int main()
{

    [[maybe_unused]] int a=54;
    cout<<"hello world";

}

输出:

C++ 属性

说明:

在上面的示例中,我们有一个未使用的变量 “a” 。尽管如此,编译器不会抛出关于此未使用变量的任何错误或警告,因为我们在变量名之前使用了属性。

3. nodiscard属性

此属性用于任何函数之前,该函数的返回值不能被丢弃。

C++示例:

#include 
#include 
using namespace std;
[[nodiscard]] int f()
{
    return 0;
}

int main()
{
    int x=1;
    x=f();
cout<

输出:

C++ 属性

解释:

在上面的示例中,我们从函数f中获得的返回值为0,并将其存储在变量x中,因此我们利用了返回值,并且不会出现错误。

C++示例2:

#include 
#include 
using namespace std;
[[nodiscard]] int f()
{
    return 0;
}

int main()
{
    int x=1;
    f();
cout<

输出:

C++ 属性

解释:

在上面的代码中,我们丢弃了函数f的返回值,并且在函数之前使用了nodiscard属性,因此会抛出一个错误,表示我们不能丢弃变量的值。

4. likely属性

这个属性用于那些有更高概率执行的条件语句之前。

C++示例:

#include
using namespace std;

int f(int i)
{
    switch (i) {
    case 1:
        [[fallthrough]];
        [[likely]] case 2 : return 1;
    }
    return 2;
}

int main(){
cout<

输出:

C++ 属性

标准属性与非标准属性的区别

  1. 在标准属性中,语法使用双大括号[[…]],而在非标准属性中,我们可以以非标准的方式编写属性,并使用一些特定的关键字如declspec() 或 attribute
  2. 在标准属性中,编译器不会给出警告或错误,并且代码非常具有移植性。在非标准属性中,代码也具有移植性,但可能会被编译器给出警告或错误。
  3. 标准属性几乎存在于所有的编译器中,而非标准属性通常只存在于特定的编译器中。
  4. 标准属性不使用标准的命名空间语法,而非标准属性使用标准的命名空间语法。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程