草庐IT

assert_difference

全部标签

c++ - static_assert 依赖于非类型模板参数(gcc 和 clang 的不同行为)

templatestructHitchhiker{static_assert(sizeof(answer)!=sizeof(answer),"Invalidanswer");};templatestructHitchhiker{};在尝试使用static_assert禁用常规模板实例化时,我发现clang中的上述代码即使在模板未实例化时也会生成断言错误,而gcc仅在使用42以外的参数实例化Hitchhiker时才会生成断言错误。摆弄我发现这个断言:templatestructHitchhiker{static_assert(sizeof(int[answer])!=sizeof(int

c++ - static_assert 如果表达式是 constexpr

我想创建一个类模板templateclassX{//hereI'lluseT::value(amongotherthings)};T::value通常是constexpr静态变量,但并非总是如此。T::value必须是正值,所以我想在编译期间尽可能让人们知道。如果T::value总是constexpr,我会添加static_assert之类的static_assert(T::value>0,"needpositivenumber");是否可以仅在T::value为constexpr的情况下添加此static_assert? 最佳答案

c++ - 在 Release模式下是否忽略了 assert(false)?

我正在使用VC++。assert(false)在Release模式下是否被忽略? 最佳答案 如果在Release模式下编译包括定义NDEBUG,那么是的。见assert(CRT) 关于c++-在Release模式下是否忽略了assert(false)?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/270488/

c++ - initializer_list::size() 上的 static_assert

为什么是std::initializer_list::size不允许在static_assert中使用,即使它被声明为constexpr在我的libstdc++(v.4.6)中?例如下面的代码:templateclassPoint{public:Point(std::initializer_listinit){static_assert(init.size()==Length,"Wrongnumberofdimensions");}};intmain(){Pointq({1,2,3});return0;}给出以下错误:test.C:Inconstructor‘Point::Point(

c++ - 包含 <cassert> 还是 <assert.h> 更好?

这个问题在这里已经有了答案:ShouldIincludeorinC++programs?(2个回答)关闭5年前。使用C++11,是不是更好#include或?还是没有区别?编辑:好像ShouldIincludeorinC++programs?认为它归结为污染全局命名空间。这是一个特例吗,因为assert是一个宏并且没有std::assert? 最佳答案 的内容与C标准库头文件相同,除了一个名为static_assert的宏未定义。1首选.所有不推荐使用Cheader(包括):D.5C标准库头文件[depr.c.headers]关于s

c++ - 即使模板函数在任何地方都没有调用,static_assert 也无法编译

我使用带有标志c++0x的g++4.6.3(当前是ubuntu12.04的默认包),我偶然发现了这个:templateinlineTgetValue(AnObject&){static_assert(false,"thisfunctionhastobeimplementedfordesiredtype");}编译错误:static_assertionfailed"thisfunctionhastobeimplementedforthedesiredtype"即使我还没有在任何地方调用此函数。这是一个g++错误吗?仅当在代码中的某处调用此函数时才应实例化此函数。

C++ : Difference between linking library and adding include directories

很多标题都概括了。如果我想使用库,我不确定两者之间的区别。谢谢! 最佳答案 一般来说,两者都需要。包含文件包含类型的声明、函数的原型(prototype)、inline函数、#defines、...,通常是所有信息关于编译器在编译文件时需要注意的库。相反,静态库包含库函数的实际目标代码。如果header包含原型(prototype),则静态库包含(编译的)函数的定义,即链接器将与您的链接器链接的对象模块。如果你只包含头文件而不链接静态库,链接器会提示缺少定义,因为你会在头文件中使用declared函数,而不是defined任何地方(

c++ - 为什么 C++ 标准算法 "count"会返回一个 difference_type 而不是 size_t?

为什么返回类型是std::countdifference_type迭代器(通常是ptrdiff_t)。由于计数永远不会是负数,所以size_t技术上正确的选择?如果计数超出ptrdiff_t的范围怎么办?因为数组的理论可能大小可以是size_t?编辑:到目前为止,对于函数返回ptrdiff_t的原因,还没有合适的答案。.从下面的答案中收集到的一些解释是返回类型是iterator_traits::difference_type这是通用的,可以是任何东西。直到那时,它才有意义。在某些情况下,计数可能会超过size_t.但是,返回类型为什么是typedefptrdiff_titerator_

c++ - assert 和 static_assert 有什么区别?

我知道static_assert在编译时进行断言,而assert在运行时进行断言,但实际上有什么区别?据我了解,在内心深处它们是代码片段,例如if(condition==false)exit();谁能给我一个例子,说明onlystatic_assert或onlyassert会在哪里工作?他们能做一些简单的if语句做不到的事情吗?使用它们是不好的做法吗? 最佳答案 你问了三个问题,所以我会试着回答每个问题。谁能给我一个例子,说明onlystatic_assert或onlyassert可以在哪里工作?static_assert非常适合在

c++ - QObject : Cannot create children for a parent that is in a different thread

我在Windows7Ultimate下使用Qt4.6.0(32位)。考虑以下QThread:界面classResultThread:publicQThread{Q_OBJECTQString_post_data;QNetworkAccessManager_net_acc_mgr;signals:voidonFinished(QNetworkReply*net_reply);privateslots:voidonReplyFinished(QNetworkReply*net_reply);public:ResultThread();voidrun();voidsetPostData(co