C++11addedfinal.终于!我了解final做了两件事:使类不可继承。使类中的(虚拟)函数不可覆盖(在派生类中)。这两者似乎是相互独立的。但以以下为例:classFoo{public:virtualvoidbar(){//dosomethingunimportant.}};classBazfinal:publicFoo{public:voidbar()/*final*/override{//dosomethingmoreimportantthanFoo'sbar.}};从上面,我相信Baz是final,我应该不需要指定它的virtual成员函数bar也是final。由于Baz
我们认为可能会发生初始化异常。所以我们写了try/catchblock。intf(){throw1;}classA{public:A()try:_k(f()){}catch(int){std::cout但是catch会在更深一层上重新抛出异常。这意味着下一个代码try{Aa;}catch(int){std::cout将输出:Exception1Exception2为什么这个try/catchblock的行为与普通的try/catchblock不同?完整代码示例:http://ideone.com/XjY2d 最佳答案 您的问题似乎是
我们认为可能会发生初始化异常。所以我们写了try/catchblock。intf(){throw1;}classA{public:A()try:_k(f()){}catch(int){std::cout但是catch会在更深一层上重新抛出异常。这意味着下一个代码try{Aa;}catch(int){std::cout将输出:Exception1Exception2为什么这个try/catchblock的行为与普通的try/catchblock不同?完整代码示例:http://ideone.com/XjY2d 最佳答案 您的问题似乎是
我们(应该)知道C++标准库容器,包括std::string,并不意味着继承自。但是,C++98/03确实允许我们这样做,即使它会导致错误。既然final关键字可用,那些标准库容器是否标记为final以防止对它们的不良使用继承?如果不是,那是为什么? 最佳答案 LWG在最近于2012年2月6日至10日在科纳举行的session上讨论了这个问题。我是LWGissue2113.LWG决定将LWG2113标记为NAD(不是缺陷),理由是标准已经明确现有类(如容器和std::string不能标记为final)通过实现。讨论包括这样一个事实,
我们(应该)知道C++标准库容器,包括std::string,并不意味着继承自。但是,C++98/03确实允许我们这样做,即使它会导致错误。既然final关键字可用,那些标准库容器是否标记为final以防止对它们的不良使用继承?如果不是,那是为什么? 最佳答案 LWG在最近于2012年2月6日至10日在科纳举行的session上讨论了这个问题。我是LWGissue2113.LWG决定将LWG2113标记为NAD(不是缺陷),理由是标准已经明确现有类(如容器和std::string不能标记为final)通过实现。讨论包括这样一个事实,
一个鲜为人知但几乎从未使用过的C++特性被声明:voidfoo();一种可能的法律定义是:voidfoo()try{throw42;}catch(...){}这里是wholefunctionimplementationwrappediswithinatry/catchpair,这似乎类似于允许this.intmain()这样做合法吗?例如:intmain()try{throw42;}catch(...){}Therulesformain,n3290§3.6.1主要讨论它应该采用什么参数以及它返回什么-他们似乎并没有像处理其他各种奇怪的事情(例如链接)那样明确禁止它,您可能会尝试尝试。这
一个鲜为人知但几乎从未使用过的C++特性被声明:voidfoo();一种可能的法律定义是:voidfoo()try{throw42;}catch(...){}这里是wholefunctionimplementationwrappediswithinatry/catchpair,这似乎类似于允许this.intmain()这样做合法吗?例如:intmain()try{throw42;}catch(...){}Therulesformain,n3290§3.6.1主要讨论它应该采用什么参数以及它返回什么-他们似乎并没有像处理其他各种奇怪的事情(例如链接)那样明确禁止它,您可能会尝试尝试。这
我可以嵌套try-catchblock吗?例如:voidf(){try{//Somecodetry{//Somecode}catch(ExceptionAa){//Somespecificexceptionhandling}//Somecode}catch(...){//Someexceptionhandling}}//f 最佳答案 是的,完全合法。虽然最好将内部方法移到另一种方法中,这样它看起来更干净并且您的方法更小 关于c++-我可以在C++中嵌套try-catchblock吗?,我
我可以嵌套try-catchblock吗?例如:voidf(){try{//Somecodetry{//Somecode}catch(ExceptionAa){//Somespecificexceptionhandling}//Somecode}catch(...){//Someexceptionhandling}}//f 最佳答案 是的,完全合法。虽然最好将内部方法移到另一种方法中,这样它看起来更干净并且您的方法更小 关于c++-我可以在C++中嵌套try-catchblock吗?,我
在trycatchblock中从C++中的catchblock返回值是不好的做法吗?try{//Somecode...return1;}catch(...){return0;}哪种使用try/catch的方法是好的做法? 最佳答案 不,只要返回的值是你想要的,你可以随时返回。(如果分配了内存,请确保您已清除内存)。 关于c++-在trycatchblock中返回catch是不是很糟糕?这是一个好习惯,我们在StackOverflow上找到一个类似的问题: ht