Die*_*ter 5 c++ visual-c++ c++11 visual-studio-2015
在Visual Studio 2015中编译时,此代码始终会产生 C4554 警告。但是,g++(在 Coliru 上)编译它时不会发出警告。警告消息是:
警告 C4554:“<<”:检查运算符优先级是否存在可能的错误;使用括号来阐明优先级
据此,运算符-优先于运算符<<。所以甚至不需要括号。(省略它们会产生相同的警告。)有人可以告诉我此警告的原因,或者如何消除它吗?
#include <array>
template<int C>
void F(std::array<int, 2 << (C-1)> const&) // 2 << (2-1) = 4
{
}
int main()
{
std::array<int,4> arr;
F<2>(arr);
}
Run Code Online (Sandbox Code Playgroud)
小智 4
你可以试试这个:
constexpr std::size_t calc_size(int param)
{
return 2 << (param - 1);
}
template<int C>
void F(std::array<int, calc_size(C)> const&) // 2 << (2-1) = 4
{
}
Run Code Online (Sandbox Code Playgroud)