Jim*_*son 36 c++ decltype c++11
考虑以下程序:
int main ()
{
const int e = 10;
for (decltype(e) i{0}; i < e; ++i) {
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
这无法使用clang(以及gcc)进行编译:
decltype.cpp:5:35: error: read-only variable is not assignable
for (decltype(e) i{0}; i < e; ++i) {
^ ~
Run Code Online (Sandbox Code Playgroud)
基本上,编译器假设i必须是const,因为e是.
有没有办法可以decltype用来获取类型e,但删除说明const符?
zch*_*zch 39
#include<type_traits>
...
for (std::remove_const<decltype(e)>::type i{0}; i < e; ++i)
Run Code Online (Sandbox Code Playgroud)
Cas*_*sey 33
我更喜欢auto i = decltype(e){0};这个.它比使用更简单type_traits,我觉得它更明确地指定了你想要一个变量初始化为0 e的类型的意图.
我最近一直在使用Herb的"AAA风格",所以它可能只是偏向于我.
您还可以使用std::decay:
#include<type_traits>
...
for (std::decay<decltype(e)>::type i{}; i < e; ++i) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
尚未提及的解决方案:
for (decltype(+e) i{0}; i < e; ++i)
Run Code Online (Sandbox Code Playgroud)
原始类型的Prvalue已const删除;所以+e是类型的prvalue,int因此decltype(+e)是int。
| 归档时间: |
|
| 查看次数: |
8689 次 |
| 最近记录: |