当我们访问cv :: Mat结构的特定元素时,我们可以使用mat.at(i,j)来访问位置i,j的元素.然而,不能立即清楚的是,(i,j)是指矩阵中的x,y坐标,还是第i行和第j列.
我相信在下面的代码中,C"自动转换为17 int *",正如有人最近指出的那样(但没有说明原因),这是错误的.
int *ptoi = 17; // I assumed that 17 is being automatically casted to int *
Run Code Online (Sandbox Code Playgroud)
我知道如果我在C++中做同样的事情,我会收到一个错误invalid conversion from int to int *.但是,如果我在C++中执行以下操作,它可以正常工作:
int *ptoi = (int *)17;
Run Code Online (Sandbox Code Playgroud)
这些是我认为在C中,铸造是隐含的原因.
有人可以解释为什么,在C++中,我必须使用它,但在C中,它工作正常吗?
我的最终项目(扑克和黑色插孔卡片)中有很多错误.我正在使用向量来实现blackJack类中的"hands",我正在使用在另一个类中声明的结构化数据类型,这是公开继承的.我担心的错误是我正在使用的编译器告诉我,我没有在向量中声明一个类型.
blackJack头文件:
#ifndef BLACKJACK_H
#define BLACKJACK_H
#include <vector>
#include "card.h"
class blackJack: public cards
{
private:
vector <Acard> playerHand;
vector <Acard> dealerHand;
public:
blackJack();
void dealHands();
void hitOrStay();
void dealerHit();
int handleReward(int);
void printHands();
};
#endif
Run Code Online (Sandbox Code Playgroud)
卡头文件(这是黑杰克继承的类):
#ifndef CARD_H
#define CARD_H
const char club[] = "\xe2\x99\xa3";
const char heart[] = "\xe2\x99\xa5";
const char spade[] = "\xe2\x99\xa0";
const char diamond[] = "\xe2\x99\xa6";
//structured data to hold card information
//including:
// a number, representing Ace-King (aces low)
//a character, representing the card's …Run Code Online (Sandbox Code Playgroud) 给出一些源文件test.cpp我想创建一个共享库libtest.so.我试图在automake文件的范围内这样做但是我似乎无法让它工作.
例如,在g ++下,我执行以下操作:
g++ -shared -fPIC test.cpp -o libtest.so
Run Code Online (Sandbox Code Playgroud)
然后我可以创建另一个依赖于共享库的文件,如下所示:
g++ mytest.cpp libtest.so -o blah
Run Code Online (Sandbox Code Playgroud)
我读过,automake只支持通过libtool创建共享库.我试图让我的automake scriupt工作如下,但它似乎永远不会产生.so.我得到的最接近的是生成.la和.o文件:
在configure.ac中:
AC_ENABLE_SHARED
AC_DISABLE_STATIC
AC_PROG_LIBTOOL(libtool)
Run Code Online (Sandbox Code Playgroud)
在Makefile.am中
lib_LTLIBRARIES=libtest.la
libtest_la_SOURCES=test.cpp
libtest_la_CFLAGS=-fPIC
libtest_la_CPPFLAGS=-fPIC
libtest_la_CXXFLAGS=-fPIC
libtest_la_LDFLAGS= -shared -fPIC
Run Code Online (Sandbox Code Playgroud)
有人能给我一个基于上述构建.so的例子吗?
我正在阅读"C++ Cookbook",其中包含以下代码段:
// cout << s << std::endl; // You shouldn't be able to
wcout << ws << std::endl; // run these at the same time
Run Code Online (Sandbox Code Playgroud)
如果您对查看实际示例感兴趣,可以在此处找到Google图书页面的链接.
此外,我发现这个SO问题似乎表明混合wcout和cout是可以的.有人可以向我解释一下这个评论的内容吗?
编辑
从C++标准[27.4.1]:
对相应的宽字符和窄字符流的混合操作遵循与在FILE上混合此类操作相同的语义,如ISO C标准的修订1中所规定的.
从C标准[7.19.2]:
每个流都有一个方向.在流与外部文件关联之后,但在对其执行任何操作之前,该流没有方向.一旦将宽字符输入/输出功能应用于没有方向的流,该流就变为面向广泛的流.类似地,一旦将字节输入/输出功能应用于没有方向的流,该流就变成面向字节的流.只有调用freopen函数或fwide函数才能改变流的方向.(成功拨打freopen会删除任何方向.)
字节输入/输出功能不应用于面向广泛的流,宽字符输入/输出功能不应用于面向字节的流.
所以,标准似乎说你不应该混合它们.但是,我从这篇文章中找到了这句话:
对于Visual C++ 10.0,fwide函数被记录为未实现.从实际的角度来看,至少在输出整行的水平上,它显然可以很好地混合使用cout和wcout.因此,很高兴,Visual C++显然只是忽视了标准的要求,并没有维护一个不切实际的显式C FILE流方向.
而且,关于gcc,我从这里找到了这个引用:
这是一个(新的)功能,而不是一个bug,请参阅libstdc ++/11705,以及在C标准(C99,7.19)中的流方向搜索.简而言之,您不能混合面向字节和面向广泛的I/O. 目前,由于 libstdc ++/11705中指出的bug,你可以通过调用std :: ios :: sync_with_stdio(false)获得接近你期望的东西.在你的程序的开头.
本机64 bit整数算术指令是否比它们的32 bit计数器部分慢(在x86_64带有64 bitOS的机器上)?
编辑:在当前的CPU上,如Intel Core2 Duo,i5/i7等.
我一直在阅读有关C++模块提案(最新草案)的内容,但我并不完全了解它旨在解决的问题.
它的目的是允许由一个编译器构建的模块被任何其他编译器使用(当然,在相同的OS /架构上)?也就是说,提案是否相当于标准化C++ ABI?
如果没有,是否有另一个提议被认为是标准化C++ ABI并允许编译器互操作?
我想从std::unordered_map(直方图)中删除元素(直方图箱),这些元素(直方图)满足作为lambda表达式给出的预测(直方图箱具有零计数),如下所示
std::remove_if(begin(m_map), end(m_map), [](const Bin & bin) { return bin.second == 0; });
Run Code Online (Sandbox Code Playgroud)
但GCC-4.6.1抱怨如下
/usr/include/c++/4.6/bits/stl_pair.h:156:2: error: assignment of read-only member ‘std::pair<const unsigned char, unsigned char>::first’
/usr/include/c++/4.6/bits/stl_pair.h: In member function ‘std::pair<_T1, _T2>& std::pair<_T1, _T2>::operator=(std::pair<_T1, _T2>&&) [with _T1 = const unsigned char, _T2 = long unsigned int, std::pair<_T1, _T2> = std::pair<const unsigned char, long unsigned int>]’:
/usr/include/c++/4.6/bits/stl_algo.h:1149:13: instantiated from ‘_FIter std::remove_if(_FIter, _FIter, _Predicate) [with _FIter = std::__detail::_Hashtable_iterator<std::pair<const unsigned char, long unsigned int>, false, false>, _Predicate = pnw::histogram<V, C, H>::pack() [with …Run Code Online (Sandbox Code Playgroud) 我安装了Xcode 4.3并想测试这个C++ 11程序:
#include <type_traits>
int main()
{
}
Run Code Online (Sandbox Code Playgroud)
但是,它找不到type_traits标题:
~ $ c++ -o test main.cpp
main.cpp:1:10: fatal error: 'type_traits' file not found
#include <type_traits>
^
1 error generated.
Run Code Online (Sandbox Code Playgroud)
看来我正在使用正确的编译器:
~ $ c++ -v
Apple clang version 3.1 (tags/Apple/clang-318.0.45) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin11.3.0
Thread model: posix
Run Code Online (Sandbox Code Playgroud)
我检查了默认的包含路径:
~ $ `c++ --print-prog-name=cc1plus` -v
ignoring nonexistent directory "/usr/include/c++/4.2.1/i686-apple-darwin11"
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin11/4.2.1/../../../../i686-apple-darwin11/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/include/c++/4.2.1
/usr/include/c++/4.2.1/backward
/usr/local/include
/Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin11/4.2.1/include
/usr/include
/System/Library/Frameworks …Run Code Online (Sandbox Code Playgroud) 我目前正在使用一个使用代码的库
T& being_a_bad_boy()
{
return *reinterpret_cast<T*>(0);
}
Run Code Online (Sandbox Code Playgroud)
在没有实际存在T的情况下引用T.这是未定义的行为,特别指出标准不支持,但它不是闻所未闻的模式.
我很好奇是否有任何示例或平台或用法表明在实践中这可能会导致问题.谁能提供一些?