As noticed, the markings mechanism puts the arrow in the selected position taking as reference its arrowhead. The following example demonstrates it clearly:
\documentclass[tikz,border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows,decorations.markings,plotmarks}
\begin{document}
\begin{tikzpicture}[
middlearrow/.style 2 args={
decoration={
markings,
mark=at position 0.5 with {\arrow{triangle 45}, \node[#1] {#2};}
},
postaction={decorate}
},
my mark/.style={
decoration={
markings,
mark=at position 0.5 with{\color{red}\pgfuseplotmark{x}},
},
postaction=decorate,
}
]
\draw[middlearrow={below}{+},my mark] (0,0) -- (1,0);
\draw[middlearrow={below}{+},my mark] (0,-1) -- (2,-1);
\draw[middlearrow={below}{+},my mark] (0,-2) -- (4,-2);
\end{tikzpicture}
\end{document}

What to do then? Steven showed one possibility. The same approach can be taken, easily, using only TikZ options, specifically xshift:
\documentclass[tikz,border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows,decorations.markings,plotmarks}
\begin{document}
\begin{tikzpicture}[
middlearrow/.style 2 args={
decoration={
markings,
mark=at position 0.5 with {\arrow[xshift=3.333pt]{triangle 45}, \node[#1] {#2};}
},
postaction={decorate}
},
]
\draw[middlearrow={below}{+}] (0,0) -- (1,0);
\draw[middlearrow={below}{+}] (0,-1) -- (2,-1);
\draw[middlearrow={below}{+}] (0,-2) -- (4,-2);
\end{tikzpicture}
\end{document}

The "magic number" seems to be correct. To be really precise, one should go in pgflibraryarrows.code.tex file and compute the exact width of triangle 45 arrow.
This solution does not prevent errors while changing line width.
pgflibraryarrows.code.texyou mentioned in such a way that also other arrow styles can be used. (Like: center_point_of_arrow_head = (arrow_head_right - arrow_head_left)/2. And then calculating new xshift value.) – leacbern May 06 '14 at 09:24xshift; perhaps with the newarrows.metalibrary things are different. You can always post a new question for such a problem: here we have sometikz-arrowsexperts :) – Claudio Fiandrino May 06 '14 at 09:40