青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 311, comments - 0, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

(搬運工)std::min and std::max

Posted on 2012-01-06 16:40 點點滴滴 閱讀(1514) 評論(0)  編輯 收藏 引用 所屬分類: 02 編程語言
Today I typed the following:
int t = (std::max)(timeout, lagtime);

Why did I put parentheses around std::max? Because windows.h defines (among other things) a max and a min macro. If you include windows.h the above code will not compile. For example the following:
#include "windows.h"
#include <algorithm>

void foo() {
int i = 5;
int j = 7;
int x = std::max(i,j);
}

Will produce the following error with Visual Studio C++ 2005:
1>test.cpp(7) : error C2589: '(' : illegal token on right side of '::'
1>test.cpp(7) : error C2143: syntax error : missing ';' before '::'

There are a number of ways to work around windows.h defining these two macros.

  • Use alternative names defined in windows.h.
    int x = _cpp_max(i,j);
    int y = _cpp_min(i,j);
    This is not portable; only works on Windows.

  • Define NOMINMAX before including windows.h. This might break existing code that assumes NOMINMAX is not defined.

  • Don't use std::min and std::max. Instead use the tertiary operator like so:
    int x = i > j ? i : j; // max(i,j)
    int y = i < j ? i : j; // min(i,j)
    This is portable but not as readable and more error prone.

  • Use using statements to make the code portable:
    using std::min;
    using std::max;
    int x = max(i,j);
    int y = min(i,j);
    This works but requires two more lines of code. You could also just use 'using namespace std;' but that might pull in more than you want.

  • Use std::min<int> and std::max<int>
    int x = std::max<int>(i,j);
    int y = std::min<int>(i,j);
    This requires you to specify the type. However in some cases this actually helps. For example:
    int i = 5;
    unsigned int j = 7;
    int x = (std::max)(i,j);
    int y = (std::min)(i,j);
    Note the 'unsigned'. Generates the following errors:
    1>test.cpp(7) : error C2780: 'const _Ty &std::max(const _Ty &,const _Ty &,_Pr)' : 
    expects 3 arguments - 2 provided
    1> c:\program files\microsoft visual studio 8\vc\include\xutility(3190) :
    see declaration of 'std::max'
    1>test.cpp(7) : error C2782: 'const _Ty &std::max(const _Ty &,const _Ty &)' :
    template parameter '_Ty' is ambiguous
    1> c:\program files\microsoft visual studio 8\vc\include\xutility(3182) :
    see declaration of 'std::max'
    1> could be 'unsigned int'
    1> or 'int'
    By explicitly specifying type via <int> you remove the ambiguity.

  • Use (std::min) and (std::max)
    int i = 5;
    int j = 7;
    int x = (std::max)(i,j);
    int y = (std::min)(i,j);
    This works (as does the std::max<int>) because the C++ preprocessor requires '(' as the next preprocessing token following the macro name to preform the macro expansion.
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美激情一区二区久久久| 欧美成人免费网| 欧美久久视频| 亚洲欧洲日产国码二区| 久久电影一区| 亚洲小说区图片区| 国产欧美一区二区三区沐欲 | 一本久久综合亚洲鲁鲁| 9l视频自拍蝌蚪9l视频成人| 久久精品亚洲一区| 亚洲精品国产精品国自产在线| 美玉足脚交一区二区三区图片| 久久久午夜电影| 亚洲日本一区二区三区| 亚洲免费成人| 午夜精品免费| 久久这里只有精品视频首页| 久久精品夜夜夜夜久久| 91久久线看在观草草青青| 亚洲成人在线网| 欧美日本高清视频| 欧美伊久线香蕉线新在线| 久久免费高清| 中文av一区特黄| 99视频精品免费观看| 国产精品日韩在线一区| 麻豆91精品91久久久的内涵| 久久久久这里只有精品| 一区二区电影免费观看| 欧美一级电影久久| 亚洲欧洲午夜| 午夜精品免费视频| 亚洲精品日韩在线| 亚洲欧美综合v| 亚洲精品在线看| 午夜精品福利视频| 中日韩高清电影网| 久久久久久亚洲精品杨幂换脸| 99国产精品久久久久久久久久 | 欧美亚男人的天堂| 欧美成人免费网| 国产精品视频网| 亚洲国产欧美日韩| 国产精品一区二区三区乱码| 欧美顶级大胆免费视频| 伊人婷婷久久| 久久久久九九视频| 久久久美女艺术照精彩视频福利播放| 欧美日韩中国免费专区在线看| 亚洲欧洲美洲综合色网| 一区二区av在线| 欧美日韩一区二区高清| 99热在这里有精品免费| 亚洲一区二区三区高清不卡| 欧美色区777第一页| 亚洲婷婷国产精品电影人久久| 亚洲欧美日韩一区二区三区在线| 欧美午夜视频在线| 亚洲欧美日韩综合国产aⅴ| 久久精品一本| 亚洲国产精品成人| 欧美日本国产在线| 中文在线一区| 欧美一区二区三区久久精品 | 日韩天堂在线视频| 亚洲免费网址| 国产亚洲一区二区三区在线观看 | 亚洲一区国产精品| 国产精品影视天天线| 欧美在线视频一区二区| 暖暖成人免费视频| 日韩亚洲欧美在线观看| 国产精品国码视频| 欧美在线free| 欧美福利在线| 亚洲在线观看| 国语自产精品视频在线看| 国产一区亚洲| 久久一区二区三区国产精品| 亚洲激情一区二区三区| 欧美国产亚洲另类动漫| 日韩视频三区| 久久国产视频网| 亚洲国产精品久久久久秋霞不卡| 欧美国产日韩一区二区三区| 一本一本久久| 久久伊人精品天天| 亚洲无限av看| 激情成人综合| 欧美日韩国语| 久久精品电影| 99pao成人国产永久免费视频| 久久成人在线| 一区二区三区视频在线 | 久久野战av| 99精品欧美一区二区三区综合在线 | 日韩亚洲欧美高清| 国产视频久久久久久久| 欧美激情在线观看| 性欧美8khd高清极品| 亚洲人成网在线播放| 久久久精品国产一区二区三区| 日韩午夜免费视频| 狠狠狠色丁香婷婷综合久久五月 | 欧美国产成人精品| 久久精品国产欧美激情| 99re热这里只有精品视频| 红桃视频欧美| 国产精品老牛| 欧美视频不卡| 欧美激情一区在线| 久久婷婷综合激情| 香港久久久电影| 一区二区国产精品| 亚洲人成在线观看| 欧美成人免费网站| 欧美有码在线视频| 中文精品视频| 日韩一级黄色片| 亚洲人成网站精品片在线观看| 国产一区二区视频在线观看| 国产精品久在线观看| 欧美视频中文字幕| 欧美日韩国产麻豆| 欧美国产日韩精品| 美女在线一区二区| 久久久亚洲精品一区二区三区| 欧美亚洲一区| 先锋影院在线亚洲| 欧美一区二区三区四区高清 | 国产一区二区久久| 国产精品一区二区女厕厕| 国产精品久久久久久五月尺| 欧美日韩一区二区三区在线视频 | 亚洲电影免费观看高清完整版在线观看 | 亚洲午夜性刺激影院| 亚洲国产精品成人久久综合一区 | 亚洲美女色禁图| 亚洲国产精品第一区二区三区| 欧美一区二区私人影院日本| 久久精品免费播放| 欧美日韩亚洲一区| 亚洲一区激情| 欧美在线999| 亚洲黄页视频免费观看| 欧美不卡激情三级在线观看| 亚洲黄一区二区| 亚洲精品欧美日韩专区| 免费人成精品欧美精品| 欧美国产亚洲另类动漫| 亚洲精品中文字幕有码专区| 韩国av一区二区三区在线观看| 欧美成人中文字幕| 亚洲电影免费观看高清完整版在线观看 | 欧美日韩国产综合新一区| 欧美一区二区三区播放老司机| 亚洲伊人伊色伊影伊综合网| 一区二区免费在线播放| 亚洲视频精选在线| 亚洲女优在线| 欧美一区二区福利在线| 久久精品99国产精品日本| 亚洲深夜福利在线| 亚洲一二三区精品| 欧美一区二区性| 久久亚洲欧洲| 亚洲日本电影在线| 亚洲夜间福利| 久久成人免费视频| 欧美不卡视频一区| 国产精品久久久久婷婷| 国产主播一区| 99re6热在线精品视频播放速度| 亚洲欧美激情一区二区| 久久综合九色欧美综合狠狠| 亚洲国产视频直播| 亚洲欧美网站| 欧美国产日韩在线观看| 国产精品日本欧美一区二区三区| 一区二区三区在线视频观看| 在线亚洲观看| 另类av导航| 一本大道久久a久久精二百| 欧美在线免费视屏| 欧美日韩国产精品一卡| 国内偷自视频区视频综合| 日韩亚洲欧美在线观看| 久久精品亚洲国产奇米99| 一区二区三区久久精品| 亚洲女人小视频在线观看| 久久亚洲欧洲| 国产精品白丝av嫩草影院 | 亚洲福利视频网站| 亚洲一区网站| 欧美激情国产高清| 国产在线不卡| 午夜精品成人在线| 亚洲黄色小视频| 久久免费高清视频| 国产丝袜一区二区|