我在驱动程序实现中发现了奇怪的宏,我无法向自己解释.简化示例是:
cout << ({int i=0; while(i<10) {++i;} i;}) << endl;
它将输出10.
但为什么这种表达会变成一个价值呢?它似乎适用于C和C++.
有人可以解释一下吗?指向关键字和参考将是伟大的.
我有这样的代码
    namespace bg = boost::geometry;
    typedef typename std::conditional<highDimension,
                                    typename bg::model::point<double, 6, bg::cs::cartesian>,
                                    typename bg::model::point<double, 5, bg::cs::cartesian>>::type point;
    ..........
    point p;                    
    p.set<0>(0);
    p.set<1>(0);
    p.set<2>(0);
    ..........
GCC向我展示了很多错误,例如"错误:类型'的无效操作数'和'int'到二进制'运算符<'p.set <1>(col.a());" 所以它只是试图'比较' p.set和1
boost类实际上有模板函数集,但编译器不使用它作为函数.
如果我直接从boost类型生成typedef,就像typedef bg::model::point<double, 5, bg::cs::cartesian> point;一切正常.
我只想根据模板参数选择不同的尺寸大小highDimension.但现在我不知道如何强迫GCC了解我:)