我不明白为什么为类添加前向声明会将其指针的大小更改为成员类型
#include <iostream>
using namespace std;
int main()
{
//struct CL;
//cout<<sizeof(int (CL::*)())<<endl;
struct CL{};
cout<<sizeof(int (CL::*)())<<endl;
}
Run Code Online (Sandbox Code Playgroud)
输出VS2013:
4
但是如果我取消注释main()中的前两行,那么输出是不同的:
16
16
因此,在struct CL的定义之前只添加一个前向声明只会增加指向CL成员的指针的大小.为什么?我知道成员函数指针的大小取决于类型的结构(例如,虚函数和基类可能会增加它),但为什么sizeof运算符可以应用于指向不完整类型成员的指针?还是不行?我没有在标准中找到它
throw()在C++ 03中作为异常说明符添加,但在C++ 11中对于说明noexcept符已弃用.
在分析了一些代码以找到使用的速度之后throw(),noexcept我发现所有这些函数的函数调用大致相同.
结果:
throw() noexcept plain old function
11233 ms 11105 ms 11216 ms
11195 ms 11122 ms 11150 ms
11192 ms 11151 ms 11231 ms
11214 ms 11218 ms 11228 ms
compiled with MinGW using g++ -o test.exe inc.cpp no.cpp -std=c++11 -O3
Run Code Online (Sandbox Code Playgroud)
这是我用来描述的代码:
int main() {
unsigned long long iter = (unsigned long long)1 << (unsigned long long)40;
auto t1 = std::chrono::high_resolution_clock::now();
for(unsigned long long i = 0; i < …Run Code Online (Sandbox Code Playgroud)