bla*_*edo 16 c++ parentheses typeinfo c++11
在什么情况下,额外的分组括号会破坏C++中的内容(特别是C++ 11)?由于这里不相关的原因,我最终在一个表达式上有一个额外的,不必要的一组parens围绕它,我发现C++ 11 typeinfo函数is_same确定它是一个不同于没有括号的相同代码.这是一个有点莫名其妙的行为的简要示例:
#include <iostream>
using namespace std;
int main()
{
string s = "foo";
cout << std::is_same<decltype(s), decltype(string("foo"))>::value;
cout << std::is_same<decltype(s), decltype((s))>::value;
cout << std::is_same<decltype((s)), decltype(string("foo"))>::value;
cout << std::is_same<decltype((s)+"x"), decltype(string("foo")+"x")>::value;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
此代码打印"1001",这似乎表示中间两行中的额外parens导致表达式为不同类型,但在较大的表达式中使用该括号表达式使其再次成为相同类型.另一方面,如果我使用typeid获取类型的名称,typeid(s)并且typeid((s))似乎产生相同的东西.
我现在已经解决了眼前的问题,但我仍然不明白为什么会发生这种情况; 搜索"双括号c ++"之类的东西似乎没有出现任何相关内容(主要是有关运算符重载的页面,以及仅在特定关键字后激活的编译器扩展).
那么:这到底是怎么回事?为什么类型s不同(s)?
decltype根据附加括号的不同,以不同方式对待其参数。
第二对括号使其成为主表达式(但本身不是 id 表达式或类成员访问),因此特殊规则不适用。
这是一个讨论:decltype((c)) 中括号的意义?
| 归档时间: |
|
| 查看次数: |
943 次 |
| 最近记录: |