相关疑难解决方法(0)

为什么+++++ b不起作用?

int main ()
{
   int a = 5,b = 2;
   printf("%d",a+++++b);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

此代码提供以下错误:

错误:需要左值作为递增操作数

但是,如果我把整个空间a++ +++b,然后正常工作.

int main ()
{
   int a = 5,b = 2;
   printf("%d",a++ + ++b);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

第一个例子中的错误是什么意思?

c lvalue

86
推荐指数
8
解决办法
8132
查看次数

为什么"A <0> = 0"中的template-id由于大于或等于运算符"> ="而无法在没有空格的情况下进行编译?

template <int>
using A = int;

void f(A<0>=0);   // Attempting to declare a function f taking int,
                  // with the default argument 0

// Works as expected:
// void f(A<0> = 0);
Run Code Online (Sandbox Code Playgroud)

这既不适用于GCC 4.9.2也不适用于Clang 3.5 - 更不用说ICC或VC++了.显然,该>=位被解析为大于或等于运算符.但是,对于[temp.names]/3,这似乎是不正确的:

名称查找(3.4)后发现名称是模板名称或者operator-function-idliteral-operator-id引用一组重载函数,其中任何成员都是函数模板,如果遵循此函数通过a <,<始终将其视为template-argument-list的分隔符,而不是less-than运算符. 在解析模板参数列表时,第一个非嵌套 >138被视为结束分隔符而不是大于运算符.[..] [ 例如:

template<int i> class X { /* ...*/ };

X< 1>2 > x1; // syntax error
X<(1>2)> x2; // …
Run Code Online (Sandbox Code Playgroud)

c++ templates language-lawyer c++11

27
推荐指数
1
解决办法
684
查看次数

标签 统计

c ×1

c++ ×1

c++11 ×1

language-lawyer ×1

lvalue ×1

templates ×1