什么';s"<=&引用;C+中的运算符+;? 我遇到了下面的代码,这是从Dijkstra算法的C++实现中使用的邻接矩阵。 //read in edges keeping only the minimum for(int i=0; i<E; i++) { int v1,v2,tmp; fin >> v1; fin >> v2; fin >> tmp; adjmat[v1][v2]<?=tmp; // <?= sets left to min(left,right) adjmat[v2][v1]<?=tmp; } //只保留最小值的读入边 对于(int i=0;i>v1;fin>>v2; fin>>tmp; AdjMaT[V1] [V2] 它是一个旧的,它在注释中做它所说的(它是“最小”运算符的复合赋值形式)。这不是标准C++。

什么';s"<=&引用;C+中的运算符+;? 我遇到了下面的代码,这是从Dijkstra算法的C++实现中使用的邻接矩阵。 //read in edges keeping only the minimum for(int i=0; i<E; i++) { int v1,v2,tmp; fin >> v1; fin >> v2; fin >> tmp; adjmat[v1][v2]<?=tmp; // <?= sets left to min(left,right) adjmat[v2][v1]<?=tmp; } //只保留最小值的读入边 对于(int i=0;i>v1;fin>>v2; fin>>tmp; AdjMaT[V1] [V2] 它是一个旧的,它在注释中做它所说的(它是“最小”运算符的复合赋值形式)。这不是标准C++。,c++,operators,operator-keyword,min,C++,Operators,Operator Keyword,Min,a=a

a=a
a之间的差异相当于:

adjmat[v1][v2] = (adjmat[v1][v2]<tmp)? adjmat[v1][v2] : tmp;

我可以在Visual Studio(C++)中使用它吗?这是否意味着后者会更高效?@herohuyongtao:“它是一个GCC扩展”看起来很确定…@Jongware:嗯,它也可能是其他编译器的扩展,但我不知道。你总能找到一段等效的标准代码……在任何我能找到更多关于这个操作符的信息的地方?@herohuyongtao:我添加了一个链接。我相信这已经从最近的GCC中删除了。这段代码太傻了。妈妈当你停止使用一个非标准的三字符运算符时,你需要在它后面的注释中解释它。
template <typename T,
          typename U,
          typename P = std::less<std::common_type_t<std::decay_t<T>, std::decay_t<U>>>
T && clamp_to_minimum(T && a, U && b, P p = P())
{
    if (!(p(a, b))) { a = std::forward<U>(b); }
    return std::forward<T>(a);
}
adjmat[v1][v2] = (adjmat[v1][v2]<tmp)? adjmat[v1][v2] : tmp;
#include <stdio.h>

int f(int x)
{
    printf ("Calling f() with x=%d\n", x);
    return x*x;
}

int main()
{
    int a,b,c;

    printf ("A and B? ");
    scanf ("%d%d", &a, &b);

    c = a;
    a = (a<f(b))? a : f(b);
    printf ("A using ternary operator: %d\n", a);

    a = c;
    a <?= f(b);
    printf ("A using weird GCC extension: %d\n", a);

    return 0;
}


A and B? 3 1
Calling f() with x=1
Calling f() with x=1
A using ternary operator: 1
Calling f() with x=1
A using weird GCC extension: 1