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错误,因为它永远不会失败。谢谢,我不确定将
常量&
放在哪里!是的,我使用这些静态断言来提醒我自己和其他人,容器类型在结构上很重要,如果使用向量,程序就会失败(例如)。这是为了阻止以后有人出于性能原因决定更改类型。谢谢,我不确定将
常量放在哪里&
!是的,我使用这些静态断言来提醒我自己和其他人,容器类型在结构上很重要,如果使用向量,程序就会失败(例如)。这是为了阻止某人以后出于性能原因决定更改类型。