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

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

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

Posted on 2012-01-06 16:40 點點滴滴 閱讀(1520) 評論(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>
            欧美伊人久久久久久久久影院 | 国产精品剧情在线亚洲| 亚洲国产精品日韩| 欧美高清视频| 免费看的黄色欧美网站| 亚洲国产电影| 亚洲精品激情| 欧美日韩一卡二卡| 午夜精品久久久| 香蕉久久夜色精品国产使用方法 | 久久夜精品va视频免费观看| 极品日韩av| 亚洲国产乱码最新视频| 欧美日韩成人在线| 欧美在线亚洲一区| 久久精品日韩一区二区三区| 在线观看一区视频| 亚洲国产精品欧美一二99| 欧美精品免费播放| 欧美一区二区三区在线观看视频| 欧美一区二区福利在线| 亚洲欧洲一区二区三区久久| 一区二区精品在线| 国产揄拍国内精品对白| 亚洲黄色片网站| 国产精品久久久久久亚洲毛片| 久久精品天堂| 欧美激情a∨在线视频播放| 亚洲综合日韩| 免费成人在线观看视频| 亚洲资源av| 女主播福利一区| 欧美一级在线视频| 欧美激情精品久久久久久变态| 午夜精品成人在线| 欧美成人一二三| 性色av一区二区三区在线观看| 蜜桃av噜噜一区二区三区| 亚洲免费婷婷| 欧美jizz19性欧美| 久久久国产一区二区三区| 欧美午夜电影在线观看| 欧美丰满少妇xxxbbb| 国产女主播一区| 妖精视频成人观看www| 在线看欧美视频| 亚洲欧美视频一区二区三区| 亚洲美女电影在线| 久久综合九色99| 久久婷婷成人综合色| 国产精品美腿一区在线看| 亚洲人成在线播放网站岛国| 国内一区二区在线视频观看| 在线视频亚洲欧美| 99热在线精品观看| 蜜桃视频一区| 欧美激情精品久久久久久蜜臀| 国产精品一二| 亚洲——在线| 亚洲欧美激情一区| 国产精品久久久久久久第一福利| 最近中文字幕日韩精品| 亚洲精品视频一区| 亚洲在线中文字幕| 欧美精品v国产精品v日韩精品| 欧美成人免费观看| 激情欧美国产欧美| 欧美中文在线视频| 久久成年人视频| 国产美女诱惑一区二区| 亚洲综合色在线| 欧美一区二区播放| 国产午夜亚洲精品羞羞网站| 亚洲一区二区三区欧美| 欧美一区二区在线播放| 国产欧美欧洲在线观看| 午夜在线视频观看日韩17c| 久久国产乱子精品免费女| 狠狠狠色丁香婷婷综合激情| 欧美影院在线| 免费看亚洲片| 亚洲精品之草原avav久久| 欧美日本国产视频| 亚洲色图制服丝袜| 欧美在线观看日本一区| 一区在线视频| 久久亚洲风情| 99精品99久久久久久宅男| 香蕉成人啪国产精品视频综合网| 国产日韩欧美一区| 久久九九国产精品| 亚洲第一区在线观看| 一区二区三区欧美视频| 国产乱码精品一区二区三区av| 欧美一区二区黄| 欧美激情第3页| 亚洲欧美国产高清va在线播| 国产在线观看一区| 欧美精品黄色| 午夜性色一区二区三区免费视频| 久久这里只精品最新地址| 一区二区三区久久| 国产一区二区成人| 欧美高清视频一区| 西西人体一区二区| 亚洲精品一区二区三区蜜桃久| 午夜久久久久久久久久一区二区| 永久免费毛片在线播放不卡| 欧美日韩无遮挡| 久久久久国产精品www| 亚洲日本中文字幕区| 久久久国产91| 亚洲色图在线视频| 亚洲国产综合视频在线观看| 国产精品久久久久久久久| 欧美ed2k| 久久久亚洲精品一区二区三区| 亚洲美女黄色| 欧美好吊妞视频| 久久精品国产亚洲精品| 中国成人在线视频| 亚洲国产色一区| 狠久久av成人天堂| 国产精自产拍久久久久久蜜| 欧美高清hd18日本| 久久久久久久高潮| 亚洲一区欧美| 夜夜嗨一区二区三区| 欧美电影免费观看大全| 久久久久国产精品人| 亚洲欧美精品suv| 亚洲精品视频在线看| 亚洲第一视频网站| 好男人免费精品视频| 国产日本欧美一区二区| 国产精品久久久久9999高清| 欧美国产日韩在线观看| 免费观看不卡av| 久久精品免费观看| 久久福利资源站| 欧美一级夜夜爽| 午夜精品一区二区三区在线| 亚洲天堂偷拍| 亚洲色图在线视频| 这里只有视频精品| 亚洲私人黄色宅男| 亚洲小说欧美另类婷婷| 一区二区欧美国产| 亚洲精品午夜| 99riav久久精品riav| 夜夜夜久久久| 正在播放欧美一区| 亚洲午夜久久久| 亚洲欧美日韩精品久久| 先锋影院在线亚洲| 久久国产一区二区| 麻豆九一精品爱看视频在线观看免费| 久久久久久久999精品视频| 老色鬼精品视频在线观看播放| 久久亚洲春色中文字幕久久久| 麻豆成人在线观看| 欧美久久在线| 国产精品女主播在线观看| 国产欧美日韩在线播放| 国产一区二区三区四区在线观看| 激情丁香综合| 99ri日韩精品视频| 亚洲欧美久久久| 久久久久se| 欧美激情视频网站| 一本色道久久综合精品竹菊| 亚洲永久免费观看| 美女日韩欧美| 欧美破处大片在线视频| 国产精品乱码久久久久久| 国产一区二区三区免费在线观看| 在线观看视频一区二区欧美日韩| 亚洲三级毛片| 欧美一区二区在线观看| 男女激情视频一区| 9l视频自拍蝌蚪9l视频成人 | 久久精品国产99精品国产亚洲性色| 久久躁狠狠躁夜夜爽| 亚洲精品网址在线观看| 亚洲欧美国产精品va在线观看 | 亚洲黄网站黄| 亚洲综合日韩| 欧美高清视频www夜色资源网| 国产精品美女www爽爽爽视频| 亚洲电影免费观看高清完整版在线观看| 亚洲精品综合精品自拍| 欧美在线视屏| 亚洲精品看片| 久久久精品国产免大香伊| 欧美三级特黄| 亚洲大胆人体视频| 午夜影视日本亚洲欧洲精品| 欧美成人性生活| 欧美在线观看网址综合| 国产精品国产三级国产aⅴ浪潮|