我应该何时inline
在C++中为函数/方法编写关键字?
看到一些答案,一些相关的问题:
我应该何时不写在C++函数/方法关键字"内联"?
什么时候编译器不知道何时使函数/方法'内联'?
当一个应用程序为函数/方法写入"内联"时,是否多线程是否重要?
在阅读Herb Sutter撰写的关键词(或其他名称)时,我遇到了以下几点:
没错,有些关键字在语义上等同于空格,这是一个美化的评论.
和
我们已经看到为什么C++语言将关键字视为保留字,我们已经看到两个关键字-auto和register--它们对C++程序没有任何语义差异.不要使用它们; 无论如何,它们只是空格,并且有更快的方式来输入空格.
如果关键字auto
(可能不是在C++ 11中)并且register
没有价值,那么它们为什么被创建和使用?
如果包含register
变量之前没有任何区别
#include<stdio.h>
int main(){
register int a = 15;
printf("%d\n%d\n",&a,a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么上述程序会出错?
test_register.c:在函数'main'中:
test_register.c:4:2:错误:请求的寄存器变量'a'的地址
的printf( "%d \n%d \n",&A,A);
以下程序适用于C++.
#include<iostream>
int main(){
register int a = 15;
std::cout<<&a<<'\n'<<a;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 在C++中,如果方法是显式声明inline
(或在头文件中定义),或者允许编译器在他们认为合适的情况下内联方法,那么这些方法是否只有内联?
背景:
我需要在C代码中获取寄存器值,因此我在gcc用法中发现了这一点。我使用以下代码获得ebp值。
register int ebp asm("ebp");
printf("currently ebp is %08x\n", ebp);
// then some code use the value
Run Code Online (Sandbox Code Playgroud)
一切正常,直到我将程序的编译器更改为clang为止。在gcc中,它通常会打印类似于0x7f1284978的内容,绝对是类似value的指针。
但是当使用clang时,输出变得很奇怪,它打印出一个0x9之类的值。Ebp不能具有这样的值。
问:
如果它不支持此功能,为什么不抱怨警告或错误(使用以下代码进行编译)?
#include <stdio.h>
static size_t vfp = 0x233;
int main(void) {
register int ebp asm("ebp");
vfp = (size_t) ebp;
printf("vfp value is 0x%lx\n", vfp);
return 0;
}
Run Code Online (Sandbox Code Playgroud)