为什么以下代码无法编译(gcc-5.4.0)?
volatile int i{100};
int j{200};
std::cout << std::min(i, j);
Run Code Online (Sandbox Code Playgroud)
我的意思是我看到编译器错误:
错误:没有匹配函数来调用'min(volatile int&,int&)'
是不是volatile只是提示编译器,该变量可能会从程序外部改变?
std::min(int(i), j);
Run Code Online (Sandbox Code Playgroud)
当然是有效的.但是不应该原创作品吗?
Bat*_*eba 23
volatile是一个限定符就像const.它不仅仅是对编译器的暗示.
std::min期望这两个参数具有完全相同的类型和限定符.因此,在您的情况下,它会发出诊断.
由于你被允许引入资格赛,你可以沉迷于一点点手握和写作
std::min<volatile int>(i, j)
Run Code Online (Sandbox Code Playgroud)
Sto*_*ica 12
正如@Bathsheba指出的那样,对两个参数的类型推导必须给出相同的类型.
但是为了完整起见std::min也是超载接受一个std::initializer_list.它的元素受复制初始化的影响,因此顶级cv限定符并不重要.所以这将有效:
std::cout << std::min({i, j});
Run Code Online (Sandbox Code Playgroud)
请记住,它执行副本,不接受或返回引用.
| 归档时间: |
|
| 查看次数: |
1084 次 |
| 最近记录: |