请考虑以下代码:
struct CExample {
int a;
}
int main(int argc, char* argv[]) {
CExample ce1;
CExample ce2;
cout << "Size:" << sizeof(ce1) << " Address: " << &ce1 << endl;
cout << "Size:" << sizeof(ce2) << " Address: " << &ce2 << endl;
CExample ceArr[2];
cout << "Size:" << sizeof(ceArr[0])<< " Address: "<< &ceArr[0] <<endl;
cout << "Size:" << sizeof(ceArr[1])<< " Address: "<< &ceArr[1] <<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出示例:
ce1:Size = 4,地址:0039FAA0
ce2:Size = 4,地址:0039FA94
ceArr [0]:Size = 4,Address:0039FA84
ceArr …
这是我的代码:
#include <string>
struct A
{
int a;
std::string sa;
};
int main()
{
A arr[3]{};
}
Run Code Online (Sandbox Code Playgroud)
当我用gcc 4.8.2
(在Ubuntu 14.04上)使用-std=gnu++11
选项编译它时会出现以下错误:
example.cpp: In function ‘int main()’:
example.cpp:11:14: internal compiler error: in gimplify_init_constructor, at gimplify.c:4271
A arr[3]{};
^
Run Code Online (Sandbox Code Playgroud)
为什么会抛出内部编译器错误?这是编译器错误吗?
我正在阅读封装的多态性,我遇到了一段代码:
template <typename T>
struct Model<T> : Concept
{
Model<T>(T impl) :
mImpl(std::forward<T>(impl))
{
}
virtual Concept* clone() const override
{
return new Model<T>(mImpl)
}
virtual void operator (const LogMessage::Meta& meta, const std::string& message) override
{
mImpl(meta, message);
}
T mImpl;
};
Run Code Online (Sandbox Code Playgroud)
在模型构造函数中转发impl有什么意义?
如果通过值传递参数,它是否有意义?