小编Glu*_*ton的帖子

C++中的增量 - 何时使用x ++或++ x?

我目前正在学习C++,而且我刚刚学会了增量.我知道你可以使用"++ x"进行增量,然后使用"x ++"进行增量.

不过,我真的不知道何时使用两者中的任何一个...我从来没有真正使用过"++ x",到目前为止,事情总是很好 - 所以,我什么时候应该使用它?

示例:在for循环中,何时优先使用"++ x"?

此外,有人可以确切地解释不同的增量(或减量)如何工作?我真的很感激.

c++ pre-increment post-increment

83
推荐指数
7
解决办法
16万
查看次数

将无穷大转换为整数未定义?

无穷大(由浮点数表示)转换为整数是否为未定义的行为?

标准说:

4.10浮动积分转换

可以将浮点类型的prvalue转换为整数类型的prvalue.转换截断; 也就是说,丢弃小数部分.如果截断的值无法在目标类型中表示,则行为未定义.

但我不知道"截断值是否无法表示"涵盖无穷大.

我试图理解为什么,std::numeric_limits<int>::infinity()static_cast<int>(std::numeric_limits<float>::infinity() )有不同的结果.

#include <iostream>
#include <limits>

int main ()
{
    std::cout << std::numeric_limits<int>::infinity () << std::endl;
    std::cout << static_cast<int> (std::numeric_limits<float>::infinity () ) << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

0  
-2147483648  
Run Code Online (Sandbox Code Playgroud)

结果std::numeric_limits<int>::infinity() 很明确,等于0,但我找不到任何有关无限投射的信息.

c++ undefined-behavior

25
推荐指数
3
解决办法
2551
查看次数

通用编程与元编程

究竟有什么区别?似乎这些术语可以互换使用,但是阅读了Objective-c的维基百科条目,我遇到了:

除了C的过程编程风格之外,C++还直接支持某些形式的面向对象编程,泛型编程和元编程.

参考C++.显然他们有所不同?

programming-languages metaprogramming generic-programming

17
推荐指数
4
解决办法
6065
查看次数

使用 CMake 将 *.gcno 和 *.gcda 文件添加到 make clean 规则中

我的项目结构类似:

\n\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 logic.cpp\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 logic.h\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 logic_test.cpp\n
Run Code Online (Sandbox Code Playgroud)\n\n

主要CMakeLists.txt文件是:

\n\n
cmake_minimum_required (VERSION 2.8)\nproject (Logic)\nset (Logic_SOURCES ${PROJECT_SOURCE_DIR}/src/logic.cpp)\ninclude_directories (${PROJECT_SOURCE_DIR}/src)\nadd_library (logic SHARED ${Logic_SOURCES})\nadd_subdirectory (test)\n
Run Code Online (Sandbox Code Playgroud)\n\n

对于CMakeLists.txt测试来说是:

\n\n
find_package (GTest)\nset (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -g -march=native -mtune=native -fprofile-arcs -ftest-coverage")\nset (CMAKE_EXE_LINKER_FLAGS "-fprofile-arcs -ftest-coverage")\nset (Test_SOURCES ${Logic_SOURCES} ${PROJECT_SOURCE_DIR}/test/logic_test.cpp)\nadd_executable (logic_test ${Test_SOURCES})\ntarget_link_libraries (${TestName} gtest gtest_main gcov pthread)\n
Run Code Online (Sandbox Code Playgroud)\n\n

为了处理测试覆盖率报告,我已将自定义目标添加到test/CMakeLists.txt

\n\n
set (Coverage_REPORT ${PROJECT_BINARY_DIR}/coverage.info)\nset (Coverage_DIR    ${PROJECT_BINARY_DIR}/coverage)\nadd_custom_command (\n    OUTPUT  ${Coverage_REPORT}\n    COMMAND lcov -q -c -f -b . -d ${PROJECT_BINARY_DIR}/test …
Run Code Online (Sandbox Code Playgroud)

makefile cmake lcov test-coverage

5
推荐指数
1
解决办法
4582
查看次数

聚焦时为 QSpinBox 设置边框

对于已经存在的 Qt 项目,我想通过 q​​ss-fle 为重点小部件设置边框。但我遇到了一些意想不到的结果。当我更改QSpinBox(和QDoubleSpinBox)边框时,边框会按照我的预期改变,但是向上按钮和向下按钮也会改变并且看起来很难看。

在此处输入图片说明

这是我的样式定义(此处提供完整示例):

QSpinBox:focus
{
    border-width: 2px;
    border-style: solid;
    border-color: green;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何更改边框的外观并同时保留向上按钮和向下按钮的外观。我正在寻找的解决方案不应该是跨平台或跨版本的。

我的环境:
- KUbuntu 15.10 (amd64);
- Qt 5.4 (x64)。

更新

这是另一种风格的另一个例子:

QSpinBox
{
    border-width: 2px;
    border-style: solid;
    border-color : red;
}

QSpinBox:hover
{
    border-width: 2px;
    border-style: solid;
    border-color: blue;
}
Run Code Online (Sandbox Code Playgroud)

小部件如下所示:

在此处输入图片说明

c++ qt qtstylesheets

5
推荐指数
1
解决办法
2950
查看次数

gmock中saveArg和saveArgPointee有什么区别?

我在gmock学习.现在我试图模拟名为"task"的类,如下所示:

class MockTask : public Task
{
public:
    MOCK_METHOD3(Execute, bool(std::set<std::string> &setDeviceIDs, int timeout, PACKET_DATA *Data));
};
Run Code Online (Sandbox Code Playgroud)

我想在调用task.excute时保存struct pdata,这样我就可以验证pdata-> member.这是我的代码:

PAKET_DATA data;
EXPECT_CALL(task, Execute(testing::_, testing::_, testing::_))
    .WillOnce(testing::saveArg<2>(&data));
ASSERT_EQ(data->resultcode, 0);
Run Code Online (Sandbox Code Playgroud)

那是对的吗?saveArg和saveArgPointee的区别是什么?

c++ googlemock

5
推荐指数
1
解决办法
1万
查看次数

GCC` -fsanitize = bounds`与`std :: array`的奇怪行为

我正在尝试使用-fsanitize=bounds选项查找我的代码中的界限问题,但我遇到了奇怪的行为:

例如,在以下代码中:

#include <cstdlib>
#include <array>

int main (int, char **)
{
    std::array <char, 1> a;
    const char b = a [X]; // X <--- put index here!

    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

用选项编译:$ g++ -std=c++11 -fsanitize=bounds -O0 main.cpp -o main.

如果我尝试访问索引大于1的元素,则报告错误: /usr/include/c++/5/array:53:36: runtime error: index 2 out of bounds for type 'char [1]'.

但是如果我尝试访问索引为1的元素 - 一切正常并且没有报告错误.

这是预期的行为,可能是我错过了什么?

该示例在以下方面进行了测试:
- $ g++ --version g++ (Ubuntu 5.4.0-6ubuntu1~16.04.2) 5.4.0 20160609;
- $ g++ --version g++ (Ubuntu 6.2.0-5ubuntu12) 6.2.0 …

c++ arrays g++

5
推荐指数
1
解决办法
619
查看次数