C++ 如何断言解析为const&;的值;是正确的类型吗? MyClass::MyClass(std::list const和some_序列) { 静态断言( std::值是否相同, “某些_序列应为整数列表” ); }
如何使静态断言工作?重要的是类型是一个整数列表。C++ 如何断言解析为const&;的值;是正确的类型吗? MyClass::MyClass(std::list const和some_序列) { 静态断言( std::值是否相同, “某些_序列应为整数列表” ); },c++,c++11,C++,C++11,如何使静态断言工作?重要的是类型是一个整数列表。 干杯。无需使用静态断言(…):编译器将确保使用标准::列表调用此函数。如果要编译上述代码,需要使用 MyClass::MyClass(std::list<int> const& some_sequence) { static_assert( std::is_same<decltype(some_sequence),std::list<int>>::value ,
干杯。无需使用
静态断言(…)
:编译器将确保使用标准::列表调用此函数。如果要编译上述代码,需要使用
MyClass::MyClass(std::list<int> const& some_sequence)
{
static_assert(
std::is_same<decltype(some_sequence),std::list<int>>::value ,
"some_sequence should be an integer list"
);
}
MyClass::MyClass(std::list const和some_序列)
{
静态断言(
std::值是否相同,
“某些_序列应为整数列表”
);
}
some\u sequence
被声明为std::list const&
,这是通过decltype(some\u sequence)
获得的类型。但是,此静态断言()
永远不会失败。无需使用静态断言(…)
:编译器将确保使用标准::列表调用此函数。如果要编译上述代码,需要使用
MyClass::MyClass(std::list<int> const& some_sequence)
{
static_assert(
std::is_same<decltype(some_sequence),std::list<int>>::value ,
"some_sequence should be an integer list"
);
}
MyClass::MyClass(std::list const和some_序列)
{
静态断言(
std::值是否相同,
“某些_序列应为整数列表”
);
}
some\u sequence
被声明为std::list const&
,这是通过decltype(some\u sequence)
获得的类型。这个static\u assert()
永远不会失败。我有点困惑:一些序列的类型是const std::list&
——你还担心它可能是什么类型?@NateKohl:这个检查是为了提醒其他程序员,这种类型是list
的结构原因,不应该仅仅因为分析发现它们太慢就改变它们。那么为什么不发表评论呢?因为评论无法回击。在我看来,发表评论会更清楚,可以解释为什么需要这样做。assert是我看到的东西,我认为它是一个noob错误,因为它永远不会失败。我有点困惑:某些序列
有类型const std::list&
——您担心它可能是什么其他类型?@NateKohl:检查是为了提醒其他程序员,该类型的存在是结构性原因列表
,并且不应该仅仅因为分析发现它们太慢而更改它们。那么为什么不添加注释呢?因为注释无法回击。我认为,添加注释会更清楚,并且可以解释为什么需要这样做。断言是我看到的东西,我认为它是一个noob错误,因为它永远不会失败。谢谢,我不确定将常量&
放在哪里!是的,我使用这些静态断言来提醒我自己和其他人,容器类型在结构上很重要,如果使用向量,程序就会失败(例如)。这是为了阻止以后有人出于性能原因决定更改类型。谢谢,我不确定将常量放在哪里&
!是的,我使用这些静态断言来提醒我自己和其他人,容器类型在结构上很重要,如果使用向量,程序就会失败(例如)。这是为了阻止某人以后出于性能原因决定更改类型。