我目前正在学习C++,而且我刚刚学会了增量.我知道你可以使用"++ x"进行增量,然后使用"x ++"进行增量.
不过,我真的不知道何时使用两者中的任何一个...我从来没有真正使用过"++ x",到目前为止,事情总是很好 - 所以,我什么时候应该使用它?
示例:在for循环中,何时优先使用"++ x"?
此外,有人可以确切地解释不同的增量(或减量)如何工作?我真的很感激.
无穷大(由浮点数表示)转换为整数是否为未定义的行为?
标准说:
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,但我找不到任何有关无限投射的信息.
究竟有什么区别?似乎这些术语可以互换使用,但是阅读了Objective-c的维基百科条目,我遇到了:
除了C的过程编程风格之外,C++还直接支持某些形式的面向对象编程,泛型编程和元编程.
参考C++.显然他们有所不同?
我的项目结构类似:
\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\nRun Code Online (Sandbox Code Playgroud)\n\n主要CMakeLists.txt文件是:
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)\nRun Code Online (Sandbox Code Playgroud)\n\n对于CMakeLists.txt测试来说是:
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)\nRun Code Online (Sandbox Code Playgroud)\n\n为了处理测试覆盖率报告,我已将自定义目标添加到test/CMakeLists.txt:
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) 对于已经存在的 Qt 项目,我想通过 qss-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)
小部件如下所示:
我在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的区别是什么?
我正在尝试使用-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 …