编辑“︁
C++11
”︁(章节)
跳转到导航
跳转到搜索
Template:Editnotice load/content
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
=== 靜態assertion === C++提供了兩種方法測試assertion(聲明):巨集<code>assert</code>以及[[前處理器]]指令<code>#error</code>。但是這兩者對於模版來說都不合用。巨集在執行期測試assertion,而前處理器指令則在前置處理時測試assertion,這時候模版還未能具現化。所以它們都不適合來測試牽扯到模板參數的相關特性。 新的機能會引進新的方式可以在編譯期測試assertion,只要使用新的關鍵字<code>static_assert</code>。宣告採取以下的形式: static_assert( ''constant-expression'', ''error-message'' ) ; 這裡有一些如何使用<code>static_assert</code>的例子: <syntaxhighlight lang="cpp"> static_assert( 3.14 < GREEKPI && GREEKPI < 3.15, "GREEKPI is inaccurate!" ) ; </syntaxhighlight> <syntaxhighlight lang="cpp"> template< class T > struct Check { static_assert( sizeof(int) <= sizeof(T), "T is not big enough!" ) ; } ; </syntaxhighlight> 當常數表示式值為<code>false</code>時,編譯器會產生相應的錯誤訊息。第一個例子是前處理器指令<code>#error</code>的替代方案;第二個例子會在每個模板類別<code>Check</code>生成時檢查assertion。 靜態assertion在模板之外也是相當有用的。例如,某個演算法的實作依賴於<code>long long</code>型別的大小比<code>int</code>還大,這是標準所不保證的。這種假設在大多數的系統以及編譯器上是有效的,但不是全部。
摘要:
请注意,所有对Local Chinese Wikipedia的贡献均可能会被其他贡献者编辑、修改或删除。如果您不希望您的文字作品被随意编辑,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源(详情请见
Project:著作权
)。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
页面
讨论
大陆简体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
编辑
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息