evn*_*vnu 18 c++ g++ reference uniform-initialization c++11
我目前正在尝试理解C++ 0x的新统一初始化.不幸的是,我对使用引用的统一初始化感到困惑.例:
int main() {
int a;
int &ref{a};
}
Run Code Online (Sandbox Code Playgroud)
这个例子工作正常:
% LANG=C g++ uniform_init_of_ref.cpp -std=c++0x -o uni -Wall -Wextra
uniform_init_of_ref.cpp: In function `int main()':
uniform_init_of_ref.cpp:3:10: warning: unused variable `ref' [-Wunused-variable]
Run Code Online (Sandbox Code Playgroud)
(更新 Comeau会为该示例抛出错误,因此gcc也不应该编译它)
现在,如果我使用自定义数据类型而不是整数,它将不再起作用:
class Y
{};
int main()
{
Y y;
Y &ref{y};
}
% LANG=C g++ initialization.cpp -std=c++0x -o initialization -Wall -Wextra
initialization.cpp: In function `int main()':
initialization.cpp:9:13: error: invalid initialization of non-const reference of type `Y&' from an rvalue of type `<brace-enclosed initializer list>'
initialization.cpp:9:8: warning: unused variable `ref' [-Wunused-variable]
Run Code Online (Sandbox Code Playgroud)
不幸的是,我没有在标准草案中找到相关部分.我的猜测是我误解了统一初始化的用法,因为Comeau抱怨这条消息:
ComeauTest.c(9): error: reference variable "ref" requires an initializer
Y &ref{y};
Run Code Online (Sandbox Code Playgroud)
那么,有人可以指出我正确的方向吗?
如果你想知道为什么这个问题是相关的,为什么我不只是使用Y &ref(y):我希望能够在构造函数的初始化列表中使用统一初始化:
class X { };
class Y {
const X& x;
public:
Y (const X& xx):
x{xx}
{}
};
int main () {
X x;
Y y{x};
}
Run Code Online (Sandbox Code Playgroud)
这失败并显示与上面相同的错误消息.
注意:
LANG=C用来启用英文错误消息.| 归档时间: |
|
| 查看次数: |
1769 次 |
| 最近记录: |