草庐IT

c++ - [方括号]和*星号之间的区别

如果你写一个像这样的C++函数voidreadEmStar(int*arrayOfInt){}vsaC++functionlike:voidreadEmSquare(intarrayOfInt[]){}Whatisthedifferencebetweenusing[squarebrackets]vs*asterisk,anddoesanyonehaveastyleguideastowhichispreferrable,assumingtheyareequivalenttothecompiler?Forcompleteness,anexamplevoidreadEmStar(int*ar

c++ - GCC 中默认参数段错误的 std::map 参数和空括号初始化器

问题我收到用户报告我开发的库中存在段错误的错误报告。错误代码的最小示例是:#include#include#includevoidf(std::mapm={}){std::cout"使用GCC编译时(我测试了4.8.2和4.7.3),它会正确打印0作为容器的大小,但循环内的段错误(根本不应该执行)。解决方法但是,我可以通过将声明更改为修复问题:voidf(std::mapm=std::map{})复制map也可以:voidf(std::mapmx={}){autom=mx;std::cout"将参数更改为conststd::map&也可以。GCC4.9.1工作正常。Clang也可以很好

c++ - GCC 中默认参数段错误的 std::map 参数和空括号初始化器

问题我收到用户报告我开发的库中存在段错误的错误报告。错误代码的最小示例是:#include#include#includevoidf(std::mapm={}){std::cout"使用GCC编译时(我测试了4.8.2和4.7.3),它会正确打印0作为容器的大小,但循环内的段错误(根本不应该执行)。解决方法但是,我可以通过将声明更改为修复问题:voidf(std::mapm=std::map{})复制map也可以:voidf(std::mapmx={}){autom=mx;std::cout"将参数更改为conststd::map&也可以。GCC4.9.1工作正常。Clang也可以很好

c++ - C++中带有空尖括号的模板<>是什么意思?

templateclassA{//someclassdata};这种代码我见过很多次了。template有什么用在上面的代码中?在哪些情况下我们需要强制使用它? 最佳答案 template告诉编译器后面跟着模板特化,特别是完全特化。通常情况下,classA必须看起来像这样:templateclassA{//generalimplementation};templateclassA{//specialimplementationforints};现在,无论何时A使用,使用专用版本。您还可以使用它来专门化功能:templatevoidf

c++ - C++中带有空尖括号的模板<>是什么意思?

templateclassA{//someclassdata};这种代码我见过很多次了。template有什么用在上面的代码中?在哪些情况下我们需要强制使用它? 最佳答案 template告诉编译器后面跟着模板特化,特别是完全特化。通常情况下,classA必须看起来像这样:templateclassA{//generalimplementation};templateclassA{//specialimplementationforints};现在,无论何时A使用,使用专用版本。您还可以使用它来专门化功能:templatevoidf

curly-braces - 您是否使用花括号进行额外的范围界定?

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter寻求指导。关闭10年前。我的意思是在函数、类、if、while、switch、try-catch需要时使用它。我不知道它可以像thisuntilIsawthisSOquestion那样完成.在上面的链接中,Eli提到“他们使用它来将代码折叠在不属于通常会折叠的函数、类、循环等的逻辑部分中。”除了上面提到的还有什么其他用途?使用花括号来限制变量的范围并仅在需要时扩展范围是个好

curly-braces - 您是否使用花括号进行额外的范围界定?

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter寻求指导。关闭10年前。我的意思是在函数、类、if、while、switch、try-catch需要时使用它。我不知道它可以像thisuntilIsawthisSOquestion那样完成.在上面的链接中,Eli提到“他们使用它来将代码折叠在不属于通常会折叠的函数、类、循环等的逻辑部分中。”除了上面提到的还有什么其他用途?使用花括号来限制变量的范围并仅在需要时扩展范围是个好

c++ - if 和 else 没有大括号

我希望以下代码能够编译。Clang和VC++都在else的行上给我一个错误。voidMyFunction(std::int32_t&error){std::int32_tvariable=0;if(GetSomething())error=EOK;elseerror=ERROR;}如果我在error=EOK;周围加上花括号,那么它会编译。为什么VC++会说:illegalelsewithoutmatchingif?我的完整代码如下,用typedef替换std::uint32_t。在VC++中它仍然给出同样的错误。usingsint32=int;#defineERROR5;#define

c++ - if 和 else 没有大括号

我希望以下代码能够编译。Clang和VC++都在else的行上给我一个错误。voidMyFunction(std::int32_t&error){std::int32_tvariable=0;if(GetSomething())error=EOK;elseerror=ERROR;}如果我在error=EOK;周围加上花括号,那么它会编译。为什么VC++会说:illegalelsewithoutmatchingif?我的完整代码如下,用typedef替换std::uint32_t。在VC++中它仍然给出同样的错误。usingsint32=int;#defineERROR5;#define

c++ - 为什么 try..catch block 需要大括号?

虽然在if...else等其他语句中,如果block中只有一条指令,您可以避免使用大括号,但您不能使用try...catchblock来做到这一点:编译器不会购买它。例如:trydo_something_risky();catch(...)std::cerr使用上面的代码,g++只是说它在do_something_risky()之前需要一个“{”。为什么try...catch和if...else之间的这种行为差异?谢谢! 最佳答案 直接来自C++规范:try-block:trycompound-statementhandler-se